当你需要自动化执行 SSH 命令时,使用 sshpass 工具可以让这个过程更加容易。本文将向您介绍 sshpass 工具的用途、安装和使用方法。
什么是 sshpass 工具?
sshpass 是一个命令行工具,它允许你在不交互输入密码的情况下,通过 SSH 连接到远程主机并执行命令。与手动输入凭据相比,sshpass 工具可以显著地提高生产力,并且避免了输入密码对于自动化流程的阻碍。
安装 sshpass 工具
sshpass 工具可以通过多种方式进行安装,包括下载源代码编译,使用包管理器安装等。
# 方法一: apt 工具
sudo apt update
sudo apt install sshpass
# 方法二:yum 工具
yum install sshpass
# 方法三:源码编译(推荐)
wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
tar -zxvf sshpass-1.06.tar.gz
cd sshpass-1.06
./configure
make
make install
如何使用 sshpass 工具
下面是使用 sshpass 工具建立 SSH 连接的基本语法:
sshpass -p 'password' ssh user@hostname command
在这个命令中,-p 参数后面是 SSH 登录的密码。user 是登录 SSH 的用户名,hostname 是远程主机名或 IP 地址,command 是您想要远程执行的命令。
一个简单的示例为例,假设您要远程登录到名为 example.com 的远程服务器,用户名为 user,密码为 password,并在远程主机上列出文件夹中的所有文件,那么命令应该如下所示:
sshpass -p 'password' ssh user@example.com ls -la
command 也可以是包含多条命令的字符串,每条命令需要用分号(;)分割,示例如下:
sshpass -p 'password' ssh user@hostname "cd /home/;pwd;ls"
上面 "cd /home/;pwd;ls"
其实是三条命令,
-
cd /home
进入到home目录 -
pwd
打印当前目录目录 -
ls
列出当前目录的文件列表
请注意,使用 sshpass 工具需要注意安全问题。因为密码可能被敏感信息泄露,一定要在充分安全的条件下使用。
解决 ssh 首次链接时,会有 Are you sure you want to continue connecting 询问提示的问题
当您第一次使用 ssh 连接远程主机时,ssh 命令会提示您确认远程主机的公钥指纹(Are you sure you want to continue connecting ),以确保您连接的是正确的主机。如果您希望避免这个交互式提示,可以在 ssh 命令中添加 -o 选项,并设置参数 StrictHostKeyChecking=no,例如:
sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@host
上述命令会禁用 ssh 的主机密钥验证,直接建立连接。需要注意的是,这样做可能会存在安全风险,因为无法保证您连接到的是正确的主机,同时也无法检测到中间人攻击等安全问题。
如果您希望永久禁用 SSH 的主机密钥验证,可以在 ssh 配置文件中添加以下配置:
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
上述配置会将 StrictHostKeyChecking 设置为 no,并将 UserKnownHostsFile 设置为 /dev/null,即不再保存已知主机的公钥指纹。这样做同样存在安全风险,需谨慎使用。
总结
sshpass 工具可以帮助您更轻松地通过 SSH 连接到远程主机并执行命令,从而提高自动化工作流程的效率。在使用 sshpass 工具时,您应该注意安全问题,并确保您的密码不会被泄露。