在使用 ssh、scp 等命令进行远程操作的时候,必须手动输入密码,这就为自动化的执行造成困扰。sshpass 可以在命令行直接使用密码来进行远程连接和远程拉取文件,可以很好的解决这个问题。
安装 sshpass
Linux 软件工具安装
# ubuntu
$ apt install sshpass
# 或
$ apt-get install sshpass
# centos
yum -y install sshpass
源码安装
sshpass 源码防止在 https://sourceforge.net/projects/sshpass/files/sshpass/ ,用户可以选择版本下载:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zk90NG8H-1614319020782)(.\res\image-sshpass address.png)]
# 下载
$ sudo wget https://sourceforge.net/projects/sshpass/files/sshpass/1.06/sshpass-1.06.tar.gz
# 解压
$ tar xvzf sshpass-1.06.tar.gz
# 编译
$ cd sshpass-1.06
$ ./configure
$ make
# 安装
$ make install
# 安装完成后,在 /usr/local/bin 目录下,可以找到可执行文件 sshpass
测试 sshpass
我们准备两台 Ubuntu 系统虚拟机,IP 地址分别为 192.168.194.131、192.168.194.132,两台虚拟机均按照 ssh,并开启了 root 用户远程访问权限。
在 192.168.194.131 系统中我们安装 sshpass,然后创建一个 shell 脚本 test.sh,内容如下:
# test.sh
echo "This is a test shell, from 192.168.194.131"
然后我们在创建一个 shell 脚本 remote_exec.sh ,内容如下:
# remote_exec.sh
sshpass -p '123456' ssh root@192.168.194.132 "cd /home; rm -rf test.sh"
sshpass -p '123456' scp test.sh root@192.168.194.132:/home/
sshpass -p '123456' ssh root@192.168.194.132 "cd /home; chmod a+x test.sh; ./test.sh"
然后,赋予 remote_exec.sh 可执行权限,并执行该脚本:
$ chmoa a+x remote_exec.sh
$ ./remote_exec.sh
This is a test shell, from 192.168.194.131
# 执行完后在 192.168.194.131 Terminal 会打印 test.sh 输出语句
# 同时,在 192.168.194.132 的 /home 目录可以找到 test.sh 文件
执行 remote_exec.sh 脚本将把 192.168.194.132 系统 /home 目录下的 test.sh 文件删除(如果存在的话),然后将 192.168.194.131 系统中当前目录下的 test.sh 文件拷贝到 192.168.194.132 系统 /home 目录下,并赋予可执行权限,然后在 192.168.194.132 系统中执行 test.sh。