通过脚本将密码传递给 SSH 密钥

通过脚本将密码传递给 SSH 密钥

我正在编写一个脚本,该脚本允许我一次从所有服务器检索文件。我已准备好 SSH 密钥,以便登录我的服务器。但我的 SSH 密钥需要密码。

我编写的脚本不会自动运行,只能手动运行。因此我的脚本会提示用户输入 SSH 密钥密码。

当 SSH 密钥连接到每个服务器时,如何将密码发送到该密钥?我试图避免必须为每个服务器输入密码。

我知道我可以使用“expect”,但我希望有一种简单的方法可以做到这一点。也许是一些环境变量?

谢谢。

答案1

为什么不使用ssh-agent它呢?
请参阅手册页了解更多详细信息。:)

答案2

我会使用没有密码的 SSH 密钥。这可能不太安全,但任何允许无人值守使用的方法都会有同样的缺陷。

答案3

以下是我的看法!

  • 我有一个一直随身携带的 USB 驱动器(在我的实体钥匙链中)。
  • 我在其中创建了第二个 5 MB 大小的分区。此分区是加密的 ext4 分区。
  • 我将我的私钥(没有密码)存储在该加密分区中。
  • 在我的计算机中,我将解密此分区的密码存储在文件管理器中(我使用海豚),因此如果我插入 USB 驱动器,我可以通过两次单击来挂载加密分区,如果我将 USB 驱动器插入另一台计算机,我可以输入密码来挂载它。
  • 同样,在我的电脑中,我将我的私钥从通常所在的位置 (~/.ssh/id_rsa) 符号链接到使用 USB 驱动器安装时的位置。因此,一旦安装完毕,我就可以进行常规 ssh 而无需密码。
  • 如果我在另一台计算机上,我可以使用 -i 标志告诉 ssh 我的密钥在哪里

这样我就可以:

  • 从我日常使用的电脑上轻松登录
  • 从任何 Linux 机器上使用单一密码登录
  • 确保我的私钥始终安全地保存在我身边并存储在加密的文件系统中

答案4

最简单的解决方案是安装包sshpass并像这样使用它:
sshpass -p password ssh -i keyfile.pem user@server

相关内容