sshpass 配置安装
一、sshpass介绍
ssh登陆不能在命令行中指定密码,需要用户交互输入密码,sshpass 的出现,解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,
它支持密码从命令行、文件、环境变量中读取。所以,通过sshpass实现以非交互的形式为ssh提供密码。
二、安装配置
1、下载:目前1.0.5是最新版本,下载地址:
wget http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz
2、编译安装
#tar xf sshpass-1.05.tar.gz
#cd sshpass-1.05
#./configure
#make && make install
查看安装成功与否:
#which sshpass
/usr/local/bin/sshpass --安装成功。
3、sshpass用法和命令介绍
#sshpass -h --查看帮助
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
-f filename Take password to use from file
-d number Use number as file descriptor for getting password
-p password Provide password as argument (security unwise)
-e Password is passed as env-var "SSHPASS"
With no parameters - password will be taken from stdin
-h Show help (this screen)
-V Print version information
At most one of -f, -d, -p or -e should be used
三、用法范例
1、从命令行方式传递密码
ssh 端口为默认22的时候:
#sshpass -p userpassword ssh username@serverip
ssh 端口不是默认22的时候,假如为1234
#sshpass -p userpassword ssh -p1234 username@serverip
2、从文件读取密码
#echo "userpassword" > mypasswd
#sshpass -f mypasswd ssh username@serverip
遇到的问题:
第一次从一台服务器使用sshpass登录另一台服务器的时候,有时候执行
#sshpass -p userpassword ssh username@serverip 命令,无响应,也无报错,也无法登录到另一台服务器
原因:对于ssh的第一次登陆,会提示:“Are you sure you want to continue connecting (yes/no)”,这时用sshpass会不好使
解决办法:可以在ssh命令后面加上 -o StrictHostKeyChecking=no来解决
如:
#sshpass -p userpassword ssh -o StrictHostKeyChecking=no [email protected]
Warning: Permanently added '10.0.18.156' (RSA) to the list of known hosts.
Last login: Thu Nov 5 17:37:51 2015 from 10.0.18.157
这样就登陆成功了
如果不想在命令行中添加-o StrictHostKeyChecking=no参数,可以在sshd配置文件中修改
在所有机器上修改/etc/ssh/ssh_config文件中设置StrictHostKeyChecking no即可(默认为 #StrictHostKeyChecking ask )
3、从环境变量获取密码(测试是可以的)
#export SSHPASS="user_password"
#sshpass -e ssh username@serverip
四、实际工作中的一个小的案例
定期修改服务器(百台左右)密码之后,验证是否修改成功
#cat server_list.cfg
web1
web2
web3
#cat check_passwd.sh
#!/bin/bash
ips=`cat server_list.cfg`
for ip in $ips
do
echo ==========$ip===========
sshpass -p "server_password" ssh root@$ip ":"
[ $? -eq 0 ] && echo -e "\033[32m ==$ip==password is ok... \033[0m" || echo -e "\033[31m ==$ip==Password is error!!! \033[0m"
done
或者也可以将密码存放在一个文件中,然后使用-f 参数来获取密码