<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[实践Ok]sshpass: 用于非交互的ssh 密码验证-p参数指定明文密码，结合scp把源文件拷贝到多台机器上。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Sat, 24 Jun 2017 04:41:53 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：在多台机器上同步一个文件，尤其是刚开始重装系统或没有ansible这样的运维工具，比如想批量给升级一下yum源，用rz 是可以的，如果十来台还成，上五十台就有点麻烦了。sshpass是个好东西，结合scp和shell能完成很多台机器的文件的拷贝，然后结合sudo把文件挪动到root才能去的地方。其实还有一个expect脚步也有这个自动捕获输出并自动输入密码。但如果是第一次连接，expect可能捕获的输出可能是yes啥的输出，spawn这个命令也是expect的rpm包的一个命令，但都得yum安装，这个引出新的安装问题，http://justwinit.cn/post/5089/，还是讲sshpass包。<br/><br/>关于sshpass:<br/>rpm -qf /usr/bin/sshpass<br/>sshpass-1.05-1.el6.x86_64<br/>sshpass-1.06-1.el6.x86_64<br/><br/>sshpass: 用于非交互的ssh 密码验证<br/><br/>ssh登陆不能在命令行中指定密码，也不能以shell中随处可见的，sshpass 的出现，解决了这一问题。它允许你用 -p 参数指定明文密码，然后直接登录远程服务器。 它支持密码从命令行,文件,环境变量中读取<br/><textarea name="code" class="php" rows="15" cols="100">
sshpass -f ssh.passwd scp /etc/hosts172.16.1.31:/root/
#防止密码被看到则
echo &quot;123456&quot;&gt;ssh.passwd&nbsp;&nbsp; #这样密码容易泄漏在自己的历史记录里
sshpass -f /home/xiangdong/ssh.passwd scp /tmp/Python-2.7.2.tgz 10.64.12.7:/tmp
</textarea><br/><br/>实践如下：<br/>cd /home/xiangdong<br/>vi /home/xiangdong/ssh.passwd<br/><textarea name="code" class="php" rows="15" cols="100">
sshpass -f&nbsp;&nbsp;/home/xiangdong/ssh.passwd&nbsp;&nbsp;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
</textarea><br/><br/>同样，因为密码一样，可以起多个这样的免密拷贝，包括命令执行：<br/><textarea name="code" class="php" rows="15" cols="100">
sshpass -f /home/xiangdong/ssh.passwd ssh xiangdong@10.64.12.7 tar -zxvf /home/xiangdong/Python-2.7.2.tgz -C&nbsp;&nbsp;/home/xiangdong
sshpass -f /home/xiangdong/ssh.passwd ssh xiangdong@10.64.12.7 tar -zxvf /home/xiangdong/Python-2.7.2.tgz&nbsp;&nbsp;&nbsp;&nbsp;#和cd到家目录指定到家目录解压一样
</textarea><br/><br/>如果说ansible 的command命令不行，那就用那个raw更底层一些，如下，做解压：<br/><textarea name="code" class="php" rows="15" cols="100">
ansible 10.70.32.32 -m raw -a&quot;tar -zxvf /tmp/Python-2.7.2.tgz&quot;
ansible 10.70.32.32 -m raw -a&quot;tar -zxvf /home/xiangdong/Python-2.7.2.tgz&quot;
</textarea><br/>来自：http://jackxiang.com/post/8807/<br/><br/><br/>$&gt; sshpass -h<br/><br/>Usage: sshpass [-f&#124;-d&#124;-p&#124;-e] [-hV] command parameters<br/>&nbsp;&nbsp; -f filename Take password to use from file<br/>&nbsp;&nbsp; -d number Use number as file descriptor for getting password<br/>&nbsp;&nbsp; -p password Provide password as argument (security unwise)<br/>&nbsp;&nbsp; -e Password is passed as env-var &quot;SSHPASS&quot;<br/>&nbsp;&nbsp; With no parameters - password will be taken from stdin<br/><br/>&nbsp;&nbsp; -h Show help (this screen)<br/>&nbsp;&nbsp; -V Print version information<br/>At most one of -f, -d, -p or -e should be used<br/><br/>sshpass [-f&#124;-d&#124;-p&#124;-e] [-hV] command parameters 中的 command parameters 和使用交互式密码验证的使用方法相同<br/><br/>#从命令行方式传递密码<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$&gt; sshpass -p user_password ssh user_name@192.168..1.2<br/>&nbsp;&nbsp;&nbsp;&nbsp;$&gt; sshpass -p user_password scp -P22 192.168.1.2:/home/test/t . <br/><br/>#从文件读取密码<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$&gt;　echo &quot;user_password&quot; &gt; user.passwd<br/>&nbsp;&nbsp;&nbsp;&nbsp;$&gt; sshpass -f user.passwd ssh user_name@192.168..1.2<br/><br/>#从环境变量获取密码<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$&gt; export SSHPASS=&quot;user_password&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$&gt; sshpass -e ssh user_name@192.168..1.2 <br/><br/><br/>[oldboy@backup ~]$ sshpass -p 123456 ssh 172.16.1.31<br/><br/>#第一次操作可能没反应，可用下述参数解决<br/><br/>[root@backup ~]# sshpass -p 123456 ssh -p 22 172.16.1.31 -o StrictHostKeyChecking=no<br/><br/>Warning: Permanently added &#039;172.16.1.31&#039; (RSA) to thelist of known hosts.<br/><br/>Last login: Fri Jun 10 15:32:52 2016 from 10.0.0.1<br/><br/>[root@nfs01 ~]# logout<br/><br/>或<br/><br/>[root@backup ~]# sshpass -p 123456 ssh 172.16.1.31 -o StrictHostKeyChecking=no<br/><br/>Last login: Fri Jun 10 15:57:47 2016 from 172.16.1.41<br/><br/>[root@nfs01 ~]# logout<br/><br/>2、2、1#直接带密码连接服务器<br/><br/>[root@backup ~]# sshpass -p 123456 ssh 172.16.1.31<br/><br/>Last login: Fri Jun 10 15:57:35 2016 from 172.16.1.41<br/><br/>[root@nfs01 ~]# logout<br/><br/>2、2、2#以文件形式保存密码连接服务器<br/><br/>[root@backup ~]# echo &quot;123456&quot;&gt;ssh.passwd<br/><br/>[root@backup ~]# sshpass -f ssh.passwd ssh 172.16.1.31<br/><br/>Last login: Fri Jun 10 16:00:06 2016 from 172.16.1.41<br/><br/>[root@nfs01 ~]# logout<br/><br/>Connection to 172.16.1.31 closed.<br/><br/>2、2、3#将密码写入变量<br/><br/>[root@backup ~]# export SSHPASS=&quot;123456&quot;<br/><br/>[root@backup ~]# sshpass -e ssh 172.16.1.31<br/><br/>Last login: Fri Jun 10 16:05:14 2016 from 172.16.1.41<br/><br/>[root@nfs01 ~]# logout<br/><br/>Connection to 172.16.1.31 closed.<br/><br/>2、2、4#同理远程拉取、推送文件、执行命令等操作scp,rsync均可。<br/><br/>[root@backup ~]# sshpass -f ssh.passwd scp /etc/hosts172.16.1.31:/root/<br/><br/>[root@nfs01 ~]# pwd<br/><br/>/root<br/><br/>[root@nfs01 ~]# ls -l hosts<br/><br/>-rw-r--r-- 1 root root 158 Jun 10 16:13 hosts<br/><br/>[root@backup ~]# sshpass -f ssh.passwd ssh 172.16.1.31 ls /root/<br/><br/>anaconda-ks.cfg<br/><br/>hosts<br/><br/>install.log<br/><br/>install.log.syslog<br/><br/><br/>3、总结<br/><br/>sshpass的优点：简单易用，速度会比expect快很多。<br/><br/>sshpass的缺点：-p参数密码是明文显示，可以通过history查看。-f参数则需要对面文件进行权限限制，保证他人无法查看。-e参数别人也可以查到IP。<br/><br/>来自：http://blog.51cto.com/ylcodes01/1789306<br/>源码位置：http://sourceforge.net/projects/sshpass/<br/>摘录自：http://m.blog.csdn.net/article/details?id=7293274<br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践Ok]sshpass: 用于非交互的ssh 密码验证-p参数指定明文密码，结合scp把源文件拷贝到多台机器上。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>