【问题标题】:How to avoid typing passphrase for public key when using ssh使用 ssh 时如何避免为公钥输入密码
【发布时间】:2020-03-28 00:57:11
【问题描述】:

如果我想使用密码,我可以这样做:

`sshpass -f <(printf '%s\n' your_password) ssh user@hostname`

但 sshpass 似乎不适用于公钥。我尝试了以下命令,但失败了:

`sshpass -f <(printf '%s\n' your_passphrase) ssh -o PreferredAuthentications=publickey user@hostname`

有什么好的方法吗?

【问题讨论】:

标签: linux ssh sshpass


【解决方案1】:

您可以使用sshpass 选项-P 来检测密码提示:

sshpass -Ppassphrase -f <(printf '%s\n' your_passphrase) ssh -o PreferredAuthentications=publickey user@hostname

【讨论】:

  • -Ppassphrase 中少了一个空格(应该是-P passphrase),而且不需要使用printf 尤其是sshpass 的选项-f(用来通过包含密码的文件),但使用 -p 代替(您可以直接插入密码)。当然,如果您直接在命令行中插入,则此方法是不安全的,在这种情况下,我建议将密码保存到文件中并使用-f 提供文件名。所以更简单的命令可能是sshpass -P passphrase -p your_passphrase ssh -o PreferredAuthentications=publickey user@hostname
【解决方案2】:

您到底为什么要使用sshpass 来输入公钥?

如果您想在交互式情况下使用没有密码提示的公钥,只需使用ssh agent。至少在 Ubuntu 上,它默认运行。您所要做的就是添加您想要的密钥并输入一次密码。

如果您想通过脚本执行此操作,只需创建密钥的未加密版本。它与使用 sshpass 一样安全(如果不是更安全),并且省去了使用其他程序的麻烦。

就个人而言,我从头开始编写了几个开源项目。在这四个左右获得了一些人气的人中,没有一个比sshpass 更让我感到惊讶。这是一天的工作,旨在解决特定的极端情况。 我知道它比我最初预期的要有用得多,但是如果可以选择公钥身份验证,我真的看不出任何使用它的意义。

【讨论】:

  • ssh 代理的问题是执行ssh-add 时需要密码,但我需要整个过程是非交互的。原因是我正在开发一个项目,其中需要以其他用户的身份执行命令,并给出用户名和公钥。
  • @yurenzhong 然后使用ssh-keygen 将密码从私钥中删除。此解决方案仍然比将密码存储在脚本文件中更安全。
  • @Harvett:你可能想使用libssh
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2021-11-29
  • 1970-01-01
  • 2021-10-05
  • 2015-05-03
  • 1970-01-01
  • 2014-07-26
相关资源
最近更新 更多