ssh登陆不能在命令行中指定密码。sshpass的出现,解决了这一问题。

sshpass用于非交互SSH的密码验证,一般用在sh脚本中,无须再次输入密码。

1、基本使用

sshpass -p password ssh username@192.168.0.1 '<command>'

2、不在命令行显示密码

为了防止在屏幕上显示密码,可以使用 -e 标志,并将密码作为 SSHPASS 环境变量的值输入,如下所示:

export SSHPASS='my_pass_here'
echo $SSHPASS
sshpass -e ssh username@192.168.0.1 '<command>' 

注意:在上面的示例中,SSHPASS 环境变量仅用于临时目的,并将在重新启动后删除。

要永久设置 SSHPASS 环境变量,打开 /etc/profile 文件,并在文件开头输入 export 语句:

export SSHPASS='my_pass_here'

保存文件并退出,接着运行下面的命令使更改生效:

$ source /etc/profile

另外,也可以使用 -f 标志,并把密码放在一个文件中。 这样,您可以从文件中读取密码,如下所示:

sshpass -f password_filename ssh username@192.168.0.1 '<command>'

3、 特别说明

3.1、 将 sshpass 用于批量传输文件

sshpass -f password_filename scp /Users/demo username@192.168.0.1:/demo_path

如果拷贝文件失败是因为第一次ssh让你输入yes

把 StrictHostKeyChecking no加到/etc/ssh/ssh_config可以让ssh客户端自动接受新主机的hostkey,不用 每次在ssh新主机时都自己输入yes

echo 'StrictHostKeyChecking no'>>/etc/ssh/ssh_config

3.2、 sshpass 安装

  • Ubuntu:
apt-get install sshpass
  • CentOS:
 wget http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz 
 tar xvzf sshpass-1.05.tar.gz
 cd sshpass-1.05.tar.gz
 ./configure
 make
 make install