ssh非交互式(二):sshpass;最后附批量分发ssh公钥命令

其实想在 一 中说下 expect ,但是介于 expect 语法比较麻烦,所以我就直接说下今天这个小命令 sshpass。该命令配置相对 expect 简单不少。

一,安装sshpass

从网站上下载代码,http://sourceforge.net/projects/sshpass/

tar -zxvf sshpass-1.05.tar.gz
cd sshpass-1.05
./configure
make && make install

二、sshpass命令参数

# sshpass --help
sshpass: invalid option -- '-'
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

   -P prompt     Which string should sshpass search for to detect a password prompt
   -v            Be verbose about what you're doing
   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

三、sshpass结合ssh一起使用

sshpass -p 'password' ssh 192.168.36.236

四、sshpass远程执行一条命令

重置下密码

sshpass -p 'password' ssh 192.168.36.236 'echo 'password' | passwd --stdin root'

五、解决第一次登陆机器的交互式问题

sshpass -p 'password' ssh -o StrictHostKeyChecking=no 192.168.36.236 'echo 'password' | passwd --stdin root'

 六、sshpass 结合 ssh-copy-id 实现批量分发ssh公钥

# localhost 是IP地址,远程用户默认当前执行命令的用户
sshpass -p 'password' ssh-copy-id -i /root/.ssh/id_rsa.pub -oStrictHostkeyChecking=no localhost

# 实现批量的话,自己写一个IP地址的文件,for循环就好了
for item in $(cat hosts_list.txt);
     do shell ....

备注:

  -p 指定远程的用户密码

  -i 参数指定要分发的公钥

  -o 关闭hostkeycheck

 

这次就先说到这,至于sshpass源码的解析,大家可以自行搜索。主要是我也不会,,,

 

posted @ 2018-01-09 18:49  Star-Hitian  阅读(465)  评论(0)    收藏  举报