通过ssh登陆其他机器时,需要手动输入密码,批量操作多台机器时,非常不便;而借助expect来设置自动输入密码,实现起来也略显复杂。
sshpass可以非常方便地解决自动密码登陆的问题,其常见用法为:
sshpass -p ${yourpassword} ssh ${username}@${ip} "ls -al 0</dev/null"
其中${username}@${ip}是要登录的机器账号和地址,${yourpassword}是该机器的密码。
不过,sshpass一般不是linux系统的标配,需要手动安装。安装起来也比较简单,步骤如下(root账号下):
- 下载sshpass, 下载地址:http://sourceforge.net/projects/sshpass/
- 解压tar xzvf sshpass-1.05.tar.gz
- cd sshpass-1.05
- ./configure
- make && make install
- 安装成功后即可直接通过sshpass命令使用。
下面是通过sshpass来自动遍历多台机器根目录的shell脚本示例:
#!/bin/bash
if [ $# -ne 0 ]
then
echo "Usage: $0"
exit 1
fi
mypass="abc123@#$"
ips=(10.71.48.125 10.71.48.126 10.71.48.127 10.71.48.128)
for ip in ${ips[@]}
do
echo "process ip:${ip}"
sshpass -p ${mypass} ssh root@${ip} "ls -al / 0</dev/null" 0</dev/null
done
exit 0
注意:ssh第一次登录是,可能会出现下面的提示,这会导致sshpass使用失效, 返回错误码6。
The authenticity of host ‘xxxxxx’ can’t be established
RSA key fingerprint is xxxx
Are you sure you want to continue connecting (yes/no)?
这时候可以vim打开/etc/ssh/ssh_config,添加下面的命令
StrictHostKeyChecking no
这样的话,无论ssh是否第一次登录,sshpass都可以正常执行了。