《Linux运维总结:sshpass一个很棒的免交互SSH登录工具》



一、sshpass介绍

ssh登陆不能在命令行中指定密码,也不能以shell中随处可见的,sshpass的出现,解决了这一问题。它允许你用“-p”参数指定明文密码,然后直接登录远程服务器。 它支持密码从命令行,文件,环境变量中读取。

ssh命令, 没有指定密码的参数. 以至于在脚本中使用ssh命令的时候, 必须手动输入密码, 才能继续执行. 这样使得脚本的自动化执行变得很差, 尤其当ssh对应的机器数很多的时候, 会令人抓狂.使用非交互式样有两种方式: 一种借助expect脚本, 一种借助sshpass来实现。


二、sshpass安装

# 源码包安装
wget http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz 
tar xvzf sshpass-1.05.tar.gz 
cd sshpass-1.05
./configure 
make 
make install 

# yum安装
yum install -y epel-release
yum  -y install sshpass

三、sshpass使用

[root@localhost ~]# 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

   -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

参数:
-p   password    #将参数password作为密码。
-f   passwordfile #提取文件passwordfile的第一行作为密码。
-d   使用数字作为文件描述符来获取密码
-e   将环境变量SSHPASS作为密码。

实例如下:

# 1、免密码登录
sshpass -p "123456" ssh -o 'StrictHostKeyChecking=no' root@192.168.1.149

# 2、远程执行命令
sshpass -p "123456" ssh root@192.168.1.149 "yum install vim -y"

# 3、从文件中读取密码
echo 123456 > password.txt
sshpass -f password.txt ssh root@192.168.1.149 "ip a | grep ens33"

# 4、从变量中读取密码
export SSHPASS="123456"
sshpass -e ssh root@192.168.1.149 
sshpass -e ssh root@192.168.1.149 "ip a | grep ens33"

# 5、本地文件发送到远程主机
sshpass -p "123456" scp /tmp/b.txt root@192.168.1.149:/tmp

# 6、从远程主机上拉取文件到本地
sshpass -p "123456" scp root@192.168.1.149:/tmp/b.txt /tmp

说明:sshpass不可以直接接带特殊字符意义的密码,需要转义或者用小括号,或者指定文件的方式来连接都可以规避这个问题。


四、sshpass实例

背景:定期修改服务器(1000台左右)密码之后,验证是否修改成功。

#cat ip.txt
192.168.1.149
192.168.1.150
192.168.1.151

#cat check_passwd.sh
#!/bin/bash
ips=`cat ip.txt`
for ip in $ips
do
    echo ==========$ip===========
    sshpass -p "123456" ssh root@$ip ":" 
    [ $? -eq 0 ] && echo -e  "\033[32m ==$ip==password is ok... \033[0m" || echo -e "\033[31m ==$ip==Password is error!!! \033[0m"
done

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:Linux运维实战总结

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值