Linux机器日常运维过程中,经常需要在本地运行脚本执行针对远程主机的命令。正常情况下,ssh登陆远程机器时会提示输入密码,这会影响到脚本的自动执行,(因为shell脚本中没有自动填充密码的命令)。
总的来说,有三个办法来解决问题:
1)使用远程登录工具
2)建立主机间的ssh信任关系
3)用脚本模拟scp命令的密码输入过程,避免每次手工输密码
今天主要来介绍一下第一种方法——使用远程登录工具。那么一般常用的工具有expect以及sshpass,而本文主要介绍的是sshpass。
一、sshpass介绍
ssh登陆不能在命令行中指定密码,需要用户交互输入密码,sshpass 的出现,解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器。
二、安装配置
1、下载:
下载地址为:http://sourceforge.net/projects/sshpass/files/sshpass
目前1.0.6是最新版本:
wget http://sourceforge.net/projects/sshpass/files/sshpass/1.06/sshpass-1.06.tar.gz
也可以使用sudo apt-get install sshpass来安装。
2、编译安装
#cd sshpass-1.05
#./configure
#make && make install
查看安装成功与否:
3、sshpass用法和命令介绍
三、用法范例
从当前服务器向192.168.67.171服务器下面的liao用户根目录下拷贝一个名叫a.out的文件。
其中,liao用户的密码为liao123
写一个名字为scp的shell脚本:
保存,chmod +x scp,给scp文件权限。然后./scp 执行该文件。
我们可以看到,在没有执行该脚本之前,171服务器liao用户根目录下的文件是这样的:
执行完之后,根目录的文件多出了a.out,脚本成功通过sshpass工具实现了免密码登录远程服务器。