使用脚本自动inputSSH密码

我需要创build一个自动input密码给OpenSSH ssh客户端的脚本。

假设我需要使用密码a1234b进入myname@somehost SSH。

我已经试过了…

 #~/bin/myssh.sh ssh myname@somehost a1234b 

…但这不起作用。

我怎样才能得到这个function到脚本?

首先你需要安装sshpass 。

  • Ubuntu / Debian: apt-get install sshpass
  • Fedora / CentOS: yum install sshpass
  • Arch: pacman -S sshpass

例:

 sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM 

自定义端口示例:

 sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM:2400 

使用公钥authentication: https : //help.ubuntu.com/community/SSH/OpenSSH/Keys

在源主机上只运行一次:

 ssh-keygen -t rsa # ENTER to every field ssh-copy-id myname@somehost 

这一切,之后,你将能够做到没有密码的SSH。

找了几个月的问题的答案后,我终于find了一个真正的最佳解决scheme:写一个简单的脚本。

 #!/usr/bin/expect set timeout 20 set cmd [lrange $argv 1 end] set password [lindex $argv 0] eval spawn $cmd expect "assword:" send "$password\r"; interact 

把它放到/usr/bin/exp ,然后你可以使用:

  • exp <password> ssh <anything>
  • exp <password> scp <anysrc> <anydst>

完成!

你可以使用期望的脚本。 我有一段时间没写过,但应该看起来如下。 你需要用#!/ usr / bin / expect来编写脚本

 #!/usr/bin/expect -f spawn ssh HOSTNAME expect "login:" send "username\r" expect "Password:" send "password\r" interact 

变体一

 sshpass -p PASSWORD ssh USER@SERVER 

变体二

 #!/usr/bin/expect -f spawn ssh USERNAME@SERVER "touch /home/user/ssh_example" expect "assword:" send "PASSWORD\r" interact 
 # create a file that echo's out your password .. you may need to get crazy with escape chars or for extra credit put ASCII in your password... echo "echo YerPasswordhere" > /tmp/1 chmod 777 /tmp/1 # sets some vars for ssh to play nice with something to do with GUI but here we are using it to pass creds. export SSH_ASKPASS="/tmp/1" export DISPLAY=YOURDOINGITWRONG setsid ssh root@owned.com -p 22 

参考: https : //www.linkedin.com/pulse/youre-doing-wrong-ssh-plain-text-credentials-robert-mccurdy?trk=mp-reader-card

我得到这个工作如下

.ssh / config被修改,以消除是/否提示 – 我在防火墙后面,所以我不担心伪装的SSH密钥

 host * StrictHostKeyChecking no 

创build一个期望的响应文件,即answer.expect

 set timeout 20 set node [lindex $argv 0] spawn ssh root@node service hadoop-hdfs-datanode restart expect "*?assword { send "password\r" <- your password here. interact 

创build你的bash脚本,只需在文件中调用expect

 #!/bin/bash i=1 while [$i -lt 129] # a few nodes here expect answer.expect hadoopslave$i i=[$i + 1] sleep 5 done 

获取128个hadoop datanodes刷新与新的configuration – 假设您正在使用NFS挂载的hadoop / conf文件

希望这可以帮助别人 – 我是一个Windows数字,这花了我大约5个小时弄清楚!

我有一个更好的解决scheme,包括login您的帐户,而不是更改为root用户。 这是一个bash脚本

http://felipeferreira.net/index.php/2011/09/ssh-automatic-login/

@abbotto的答案不适合我,不得不做一些不同的事情:

  1. yum install sshpass改为 – rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/sshpass-1.05-1.el6.x86_64.rpm
  2. 使用sshpass的命令改为 – sshpass -p“pass”ssh user @ mysite -p 2122

要通过shell脚本连接远程机器,请使用以下命令:

 sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no USERNAME@IPADDRESS 

其中IPADDRESSUSERNAMEPASSWORD是需要在脚本中提供的input值,或者如果我们想在运行时提供“读取”命令。

要让密钥交换在拇指驱动器上工作,必须将私钥复制到驱动器中,并在ssh命令中指定它(以避免使用本地帐户私钥),例如:

 ssh -i id_rsa host 

或者,你可以使用expect(这是一个独立的shell脚本)。 这是以前关于SSH和期望的问题 。

请注意,任何人都可以打开期望脚本并以纯文本forms查看login凭据。