使用密码保护的SSH密钥

76次阅读
没有评论

问题描述

当使用密码保护的SSH密钥时,是否有办法在命令行自动传递密码,而不是手动输入密码?
例如,类似以下命令的方式:

ssh-add <key> -p password

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1:使用sshpass工具

使用sshpass工具可以实现在命令行自动传递密码,从而避免手动输入密码。以下是操作步骤:

  1. 首先,你需要安装sshpass工具。在不同的Linux发行版中,安装命令可能会有所不同:
  2. Ubuntu/Debian:sudo apt-get install sshpass
  3. Fedora/CentOS:sudo yum install sshpass

  4. 使用sshpass命令来自动传递密码并执行SSH连接。以下是示例命令:

sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM
  1. 如果需要自定义端口号,可以在SSH连接命令中指定端口号,例如:
sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM:2400
  1. 请注意,sshpass还支持从文件中读取密码,通过使用-f标志。使用此方式可以避免通过ps命令查看密码:
  2. 创建一个密码文件,确保文件权限安全。
  3. 使用以下命令来执行SSH连接:
sshpass -f /path/to/password/file ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM

方案2:去除密钥密码

另一种方法是在不需要密码的情况下使用SSH密钥。你可以通过以下步骤来去除密钥的密码:

  1. 执行以下命令,将现有的密钥从旧密码改为空密码:
ssh-keygen -p -P old_passphrase -N "" -f keyfile

其中,old_passphrase是当前的密码,keyfile是你的SSH密钥文件。

通过以上两种方案,你可以实现在命令行自动化地处理使用密码保护的SSH密钥的连接,选择适合你需求的方法。

正文完