标题:[实践Ok]sshpass: 用于非交互的ssh 密码验证-p参数指定明文密码,结合scp把源文件拷贝到多台机器上。 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Sat, 24 Jun 2017 12:41:53 +0000 作者:jackxiang 地址:http://jackxiang.com/post/9255/ 内容: 背景:在多台机器上同步一个文件,尤其是刚开始重装系统或没有ansible这样的运维工具,比如想批量给升级一下yum源,用rz 是可以的,如果十来台还成,上五十台就有点麻烦了。sshpass是个好东西,结合scp和shell能完成很多台机器的文件的拷贝,然后结合sudo把文件挪动到root才能去的地方。其实还有一个expect脚步也有这个自动捕获输出并自动输入密码。但如果是第一次连接,expect可能捕获的输出可能是yes啥的输出,spawn这个命令也是expect的rpm包的一个命令,但都得yum安装,这个引出新的安装问题,http://justwinit.cn/post/5089/,还是讲sshpass包。 关于sshpass: rpm -qf /usr/bin/sshpass sshpass-1.05-1.el6.x86_64 sshpass-1.06-1.el6.x86_64 sshpass: 用于非交互的ssh 密码验证 ssh登陆不能在命令行中指定密码,也不能以shell中随处可见的,sshpass 的出现,解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器。 它支持密码从命令行,文件,环境变量中读取 sshpass -f ssh.passwd scp /etc/hosts172.16.1.31:/root/ #防止密码被看到则 echo "123456">ssh.passwd #这样密码容易泄漏在自己的历史记录里 sshpass -f /home/xiangdong/ssh.passwd scp /tmp/Python-2.7.2.tgz 10.64.12.7:/tmp 实践如下: cd /home/xiangdong vi /home/xiangdong/ssh.passwd sshpass -f /home/xiangdong/ssh.passwd scp /tmp/Python-2.7.2.tgz 10.64.12.7:/home/xiangdong/ sshpass -f /home/xiangdong/ssh.passwd scp /tmp/Python-2.7.2.tgz xiangdong@10.64.12.7:/tmp scp: /tmp/Python-2.7.2.tgz: Permission denied Killed by signal 1. #权限不够,可放自己家目录下面,就Ok了 sshpass -f /home/xiangdong/ssh.passwd scp /tmp/Python-2.7.2.tgz xiangdong@10.64.12.7:/home/xiangdong #登录到10.64.12.7 ls /home/xiangdong/Python-2.7.2.tgz /home/xiangdong/Python-2.7.2.tgz 同样,因为密码一样,可以起多个这样的免密拷贝,包括命令执行: sshpass -f /home/xiangdong/ssh.passwd ssh xiangdong@10.64.12.7 tar -zxvf /home/xiangdong/Python-2.7.2.tgz -C /home/xiangdong sshpass -f /home/xiangdong/ssh.passwd ssh xiangdong@10.64.12.7 tar -zxvf /home/xiangdong/Python-2.7.2.tgz #和cd到家目录指定到家目录解压一样 如果说ansible 的command命令不行,那就用那个raw更底层一些,如下,做解压: ansible 10.70.32.32 -m raw -a"tar -zxvf /tmp/Python-2.7.2.tgz" ansible 10.70.32.32 -m raw -a"tar -zxvf /home/xiangdong/Python-2.7.2.tgz" 来自:http://jackxiang.com/post/8807/ $> 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 sshpass [-f|-d|-p|-e] [-hV] command parameters 中的 command parameters 和使用交互式密码验证的使用方法相同 #从命令行方式传递密码 $> sshpass -p user_password ssh user_name@192.168..1.2 $> sshpass -p user_password scp -P22 192.168.1.2:/home/test/t . #从文件读取密码 $> echo "user_password" > user.passwd $> sshpass -f user.passwd ssh user_name@192.168..1.2 #从环境变量获取密码 $> export SSHPASS="user_password" $> sshpass -e ssh user_name@192.168..1.2 [oldboy@backup ~]$ sshpass -p 123456 ssh 172.16.1.31 #第一次操作可能没反应,可用下述参数解决 [root@backup ~]# sshpass -p 123456 ssh -p 22 172.16.1.31 -o StrictHostKeyChecking=no Warning: Permanently added '172.16.1.31' (RSA) to thelist of known hosts. Last login: Fri Jun 10 15:32:52 2016 from 10.0.0.1 [root@nfs01 ~]# logout 或 [root@backup ~]# sshpass -p 123456 ssh 172.16.1.31 -o StrictHostKeyChecking=no Last login: Fri Jun 10 15:57:47 2016 from 172.16.1.41 [root@nfs01 ~]# logout 2、2、1#直接带密码连接服务器 [root@backup ~]# sshpass -p 123456 ssh 172.16.1.31 Last login: Fri Jun 10 15:57:35 2016 from 172.16.1.41 [root@nfs01 ~]# logout 2、2、2#以文件形式保存密码连接服务器 [root@backup ~]# echo "123456">ssh.passwd [root@backup ~]# sshpass -f ssh.passwd ssh 172.16.1.31 Last login: Fri Jun 10 16:00:06 2016 from 172.16.1.41 [root@nfs01 ~]# logout Connection to 172.16.1.31 closed. 2、2、3#将密码写入变量 [root@backup ~]# export SSHPASS="123456" [root@backup ~]# sshpass -e ssh 172.16.1.31 Last login: Fri Jun 10 16:05:14 2016 from 172.16.1.41 [root@nfs01 ~]# logout Connection to 172.16.1.31 closed. 2、2、4#同理远程拉取、推送文件、执行命令等操作scp,rsync均可。 [root@backup ~]# sshpass -f ssh.passwd scp /etc/hosts172.16.1.31:/root/ [root@nfs01 ~]# pwd /root [root@nfs01 ~]# ls -l hosts -rw-r--r-- 1 root root 158 Jun 10 16:13 hosts [root@backup ~]# sshpass -f ssh.passwd ssh 172.16.1.31 ls /root/ anaconda-ks.cfg hosts install.log install.log.syslog 3、总结 sshpass的优点:简单易用,速度会比expect快很多。 sshpass的缺点:-p参数密码是明文显示,可以通过history查看。-f参数则需要对面文件进行权限限制,保证他人无法查看。-e参数别人也可以查到IP。 来自:http://blog.51cto.com/ylcodes01/1789306 源码位置:http://sourceforge.net/projects/sshpass/ 摘录自:http://m.blog.csdn.net/article/details?id=7293274 Generated by Jackxiang's Bo-blog 2.1.1 Release