问题描述
当使用密码保护的SSH密钥时,是否有办法在命令行自动传递密码,而不是手动输入密码?
例如,类似以下命令的方式:
ssh-add <key> -p password
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1:使用sshpass工具
使用sshpass
工具可以实现在命令行自动传递密码,从而避免手动输入密码。以下是操作步骤:
- 首先,你需要安装
sshpass
工具。在不同的Linux发行版中,安装命令可能会有所不同: - Ubuntu/Debian:
sudo apt-get install sshpass
-
Fedora/CentOS:
sudo yum install sshpass
-
使用
sshpass
命令来自动传递密码并执行SSH连接。以下是示例命令:
sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM
- 如果需要自定义端口号,可以在SSH连接命令中指定端口号,例如:
sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM:2400
- 请注意,
sshpass
还支持从文件中读取密码,通过使用-f
标志。使用此方式可以避免通过ps
命令查看密码: - 创建一个密码文件,确保文件权限安全。
- 使用以下命令来执行SSH连接:
sshpass -f /path/to/password/file ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM
方案2:去除密钥密码
另一种方法是在不需要密码的情况下使用SSH密钥。你可以通过以下步骤来去除密钥的密码:
- 执行以下命令,将现有的密钥从旧密码改为空密码:
ssh-keygen -p -P old_passphrase -N "" -f keyfile
其中,old_passphrase
是当前的密码,keyfile
是你的SSH密钥文件。
通过以上两种方案,你可以实现在命令行自动化地处理使用密码保护的SSH密钥的连接,选择适合你需求的方法。
正文完