sshpass 是一个用于在命令行中非交互式地提供 SSH 密码的工具。
它可以在脚本中使用,以避免手动输入密码。以下是 sshpass 的基本用法。
安装 sshpass
在 Debian/Ubuntu 系统上:
sudo apt-get install sshpass
在 CentOS/RHEL 系统上:
sudo yum install sshpass
使用 sshpass 进行 SSH 登录
sshpass -p 'your_password' ssh user@hostname
使用 sshpass 进行 SCP 文件传输
sshpass -p 'your_password' scp /local/path/to/file user@hostname:/remote/path
从文件中读取密码
sshpass -f /path/to/password_file ssh user@hostname
使用环境变量传递密码
export SSHPASS='your_password'
sshpass -e ssh user@hostname
注意,使用 sshpass 传递密码存在安全风险,建议在可能的情况下使用 SSH 密钥认证来代替密码认证。
附记
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt user@hostname
其中的参数分别是什么意思?
解释
-
-o StrictHostKeyChecking=no:这个选项用于禁用主机密钥检查。默认情况下,SSH 会在首次连接到一个新的主机时提示用户确认该主机的密钥。如果设置为 no,SSH 将自动接受新的主机密钥,而不会提示用户确认。这在自动化脚本中非常有用,但存在安全风险,因为它可能会使你容易受到中间人攻击。 -
-o UserKnownHostsFile=/dev/null:这个选项指定了一个文件来存储已知主机的密钥。/dev/null 是一个特殊的文件,表示丢弃所有写入的数据。通过将已知主机文件设置为 /dev/null,SSH 将不会将任何主机密钥存储到已知主机文件中,也不会从中读取。这同样在自动化脚本中有用,但也存在安全风险。 -
-tt:这个选项强制分配一个伪终端。即使没有本地终端,SSH 也会分配一个伪终端。这在需要交互式会话的情况下非常有用。 -
user@hostname:这是连接的目标服务器,其中 user 是你的用户名,hostname 是目标服务器的主机名或 IP 地址。

