通過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都可以正常執行了。