如何让ssh-agent按需自动添加密钥?

Vi.*_*Vi. 66 ssh ssh-agent

我想运行 ssh-agent(具有最大生命周期选项),但不在启动时添加任何密钥,而是按需添加它们。

就像我第一次登录某个服务器时,它应该要求输入密码,下次(除非我等了一个多小时)它应该连接干净:

ssh server1
Enter passphrase for key '/home/vi/.ssh/id_dsa':
server1> ...

ssh server2
server2> # no passphrase this time

# wait for lifetime

ssh server2
Enter passphrase for key '/home/vi/.ssh/id_dsa':
Run Code Online (Sandbox Code Playgroud)

我不想手动记住每次运行“ssh-add”。(例如,只为 ssh 输入密码和“哦,它没有记住,需要重新输入”)。

如果用户提供了密码,如何配置 ssh 以自动将密钥添加到 ssh-agent?

小智 83

ssh 支持在首次使用时向代理添加密钥(自 7.2 版起)。您可以通过将以下内容放入来启用该功能~/.ssh/config

AddKeysToAgent yes
Run Code Online (Sandbox Code Playgroud)

这在使用衍生工具(例如 git)时也有效。

7.2 变更日志

  • ssh(1):? 添加一个 AddKeysToAgent 客户端选项,可以设置为“yes”、“no”、“ask”或“confirm”,默认为“no”。启用后,如果 ssh-agent 正在运行,则在身份验证期间使用的私钥将添加到 ssh-agent(如果设置为“confirm”,则启用确认)。

  • 你可能想确保你的 ~/.ssh/config 文件具有 `chmod 600 ~/.ssh/config` 的正确权限 (2认同)

Jes*_*hia 18

你可以作弊并alias ssh='ssh-add -l || ssh-add && ssh'在你的.bashrc/上放一些类似的东西.profile。第一次运行ssh-add -l,它可以返回 0(代理上有密钥)、1(没有密钥)或 2(没有代理运行);如果返回 0,ssh将运行;如果 1,ssh-add将运行然后ssh;如果为 2,ssh-add将失败并且ssh不会运行。如果您想在没有代理运行的情况下运行&&;请将替换为ssh

  • 即使进一步的 ssh 命令不使用它,它也会请求密钥的密码短语。 (4认同)
  • (考虑为ssh客户端编写auto-call-ssh-add补丁) (2认同)

Mar*_*ICE 5

在 ssh 支持 auto-call-ssh-add 之前,我.bashrc根据 Kovensky 提议在我的 中添加了这个:

ssh-add -l >/dev/null || alias ssh='ssh-add -l >/dev/null || ssh-add && unalias ssh; ssh'
Run Code Online (Sandbox Code Playgroud)

只有在没有添加身份时才会创建别名,并且别名一旦运行就会自行销毁。

这样,在添加身份后使用常规 ssh 命令。