在ssh登陆中,最麻烦的就是密码交互操作,ssh最大麻烦就是不能在命令行中指定密码。但是sshpass的出现,解决了这一问题。sshpass用于非交互SSH的密码验证,交互过程中无须再次输入密码。
安装:
CentOS:
yum install epel-release yum install sshpass
Debian&Ubuntu:
apt-get install sshpass
如果无法利用源安装,可以使用另外一种源码安装方法:
wget http://sourceforge.net/projects/sshpass/files/latest/download -O sp.tar.gz
tar -xvf sp.tar.gz
cd sshpass-1.06
./configure
make install
tar -xvf sp.tar.gz
cd sshpass-1.06
./configure
make install
服用方法:
[root@test ~]# sshpass Usage: sshpass [-f|-d|-p|-e] [-hV] command -f filename 从文件中获取密码 -d number 使用数字作为获取密码的文件描述符 -p password 提供密码作为参数(安全性不高) -e 密码作为环境变量“SSHPASS”传递 没有参数 - 密码将从标准输入中获取 -P提示sshpass搜索哪个字符串以检测密码提示 -v请详细说明你正在做什么 -h显示帮助(此屏幕) -V打印版本信息
简单使用:
-p password #后跟密码
[root@test ~]# sshpass -p 123456 ssh root@185.182.62.30
Last login: Wed Feb 13 01:32:04 2019 from 39.130.62.90
Last login: Wed Feb 13 01:32:04 2019 from 39.130.62.90
-f filename #后跟保存密码的文件名,密码是文件内容的第一行。
[root@test ~]# cat 1.txt
123456
[root@zhu ~]# sshpass -f 1.txt ssh root@185.182.62.30
Last login: Wed Feb 13 01:32:04 2019 from 39.130.62.90
123456
[root@zhu ~]# sshpass -f 1.txt ssh root@185.182.62.30
Last login: Wed Feb 13 01:32:04 2019 from 39.130.62.90
-e #将环境变量SSHPASS作为密码
[root@test ~]# export SSHPASS=123456
[root@test ~]# sshpass -e ssh root@185.182.62.30
Last login: Wed Feb 13 01:32:04 2019 from 39.130.62.90
[root@test ~]# sshpass -e ssh root@185.182.62.30
Last login: Wed Feb 13 01:32:04 2019 from 39.130.62.90
注意:强烈建议使用环境变量SSHPASS作为密码。
因为这样退出服务器后,环境变量将失效,如果使用-p传递,则可以通过history获取到密码信息,不够安全。
要永久设置 SSHPASS 环境变量,打开 /etc/profile 文件,并在文件开头输入 export 语句:
export SSHPASS='my_pass_here'
保存文件并退出,接着运行下面的命令使更改生效:
source /etc/profile
运行示例:
直接登陆新服务器:(请替换passwd和ip字段)
sshpass -p 'passwd' ssh root@185.182.62.30
直接登陆新服务器并运行脚本:
sshpass -p 'passwd' ssh root@185.182.62.30 'df -h'
结果如图所示:
使用 sshpass 通过 scp或者 rsync 备份/同步文件:
scp -r /web --rsh="sshpass -p 'pass' ssh -l root" 10.42.0.1:/var/www/html
rsync --rsh="sshpass -p 'pass' ssh -l root" 10.42.0.1:/data/backup/ /backup/
rsync --rsh="sshpass -p 'pass' ssh -l root" 10.42.0.1:/data/backup/ /backup/
同时在多台主机执行命令:
请先将ip写入a.sh,一行一个。 [root@test ~]# cat a.sh #!/bin/bash for i in $(cat /root/1.txt) do echo $i sshpass -p123456 ssh root@$i 'ls -l' done
以上都是简单举例,详细使用方法请使参考:
man sshpass