Linux下免交互 SSH 登录工具:sshpass

在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

服用方法:

[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

-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

-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

注意:强烈建议使用环境变量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/

同时在多台主机执行命令:

请先将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
» 本文链接:Linux下免交互 SSH 登录工具:sshpass
» 转载请注明来源:刺客博客
» VPS推荐:Hostdare 年付16美元的GIA 洛杉矶Crea机房
» 如果文章失效或者安装失败,欢迎加入底部QQ群一起交流讨论