通过ssh登陆其他机器时,需要手动输入密码,批量操作多台机器时,非常不便;而借助expect来设置自动输入密码,实现起来也略显复杂。

sshpass可以非常方便地解决自动密码登陆的问题,其常见用法为:

sshpass -p ${yourpassword} ssh ${username}@${ip} "ls -al 0

其中${username}@${ip}是要登录的机器账号和地址,${yourpassword}是该机器的密码。

不过,sshpass一般不是linux系统的标配,需要手动安装。安装起来也比较简单,步骤如下(root账号下):

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

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

Logo

更多推荐