果冻想
认真玩技术的地方

Linux非交互SSH密码验证方案——sshpass

前言

在很久以前,一帮南京的实施团队来内蒙古部署系统,留下了一个脚本程序,可以快速的登陆到任意主机,而不用输入密码,那个时候就比较好奇,它是怎么做的呢?后来看了一下这个工具的脚本程序,发现后面是一个叫做sshpass的命令来完成的,那个时候也没有在乎;在后来的运维工作中,要写很多的自动化脚本,要远程登陆到别的主机上去,也是使用的《详解SSH原理》这篇文章中说的“公钥免密登陆”的办法,但是使用“公钥免密登陆”的办法是需要生成公私钥对,同时还涉及到公钥分发,对于一些运维新手来说,经常在这两步犯错误;后来,我又想起了那个使用sshpass命令的工具,自己一直未曾使用过这个工具,今天就用这篇文章来对sshpass命令一探究竟。

sshpass是什么?

在我们编写自动化SHELL脚本的时候,免不了需要自动化登陆远程主机,除了上面说的“公钥免密登陆”方法外,还有这里要说的sshpass方法。

sshpass是一个简单、轻量级的命令行工具,通过它我们能够向命令提示符本身提供密码(非交互式密码验证)。SSH直接使用TTY访问,以确保密码是用户键盘输入的。sshpass在专门的TTY中运行SSH,以误导SSH相信它是从用户接收到的密码,从而实现非交互式密码验证。

使用sshpass是不安全的,因为所有系统上的用户在命令行中通过简单的“ps”命令就可看到密码。所以,还是建议使用《详解SSH原理》这篇文章中说的“公钥免密登陆”的办法。

离线安装sshpass

在CentOS中,离线DVD系统包中是不自带sshpass程序的,为了能离线安装sshpass,我们只能通过编译源码进行安装。我们通过以下简单的几步可以完成sshpass的安装。

  • 下载源码:点击这里进入下载页面
  • 得到sshpass-1.06.tar.gz源码包后,就开始编译安装吧。
    # 解压源码包
    tar -xzf sshpass-1.06.tar.gz
    
    # 建立安装目录
    mkdir sshpass
    
    # 指定安装目录进行编译
    cd sshpass-1.06
    ./configure --prefix=/home/jelly/sshpass
    make && make install
    
    su - root
    cp /home/jelly/sshpass/bin/sshpass /usr/bin/sshpass
    
  • 使用sshpass -V命令检查是否安装正确。

sshpass简单使用

在使用sshpass命令之前,我们需要对/etc/ssh/ssh_config进行修改,将#StrictHostKeyChecking ask修改为StrictHostKeyChecking no;然后service sshd restart重启SSH服务。

  • 常用方式一:免密登陆远程主机
    # 其中-p选项后面指定密码
    sshpass -p '123456' ssh jelly@192.168.1.2
    
    # 从文件的读取密码进行远程登陆
    sshpass -f ~/passwd.txt ssh jelly@192.168.1.2 
    
  • 常用方式二:免密传送文件
    sshpass -p '123456' scp ~/sshpass/bin/sshpass jelly@192.168.1.2:~/
    

总结

一个小小的命令又是一篇文章,真是学无止境啊!对于这篇文章,以及这篇文章中的sshpass命令,总结完以后,我个人觉的就是“实用”;对于我们提升日后的工作效率将会有很大的帮助。知识不在于小,而在于精悍,在于实用,sshpass这个命令就特别符合,工具虽小,但是实用就好。希望我这里的总结能够帮助到你。好了,如果觉的还不错,可以点击下方的“打赏”哦。

果冻想,认真玩技术的地方。

2019年5月19日,于内蒙古呼和浩特。

赞(7) 打赏
未经允许不得转载:果冻想 » Linux非交互SSH密码验证方案——sshpass
关注微信公众号
关注微信公众号和果冻一起分享你的疑惑与心得。
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

玩技术,我们是认真的

联系我们关于果冻

感谢支持果冻想

支付宝扫一扫打赏

微信扫一扫打赏