有没有办法指定要添加到 ssh-agent 的私钥列表?

有没有办法指定要添加到 ssh-agent 的私钥列表?

经过几个小时的挖掘,我终于找到了为什么我的计算机不再使用 gnome ssh-askpass 询问我的密钥。这很简单,但我花了很长时间才弄清楚,因为......好吧......大多数遇到类似问题的人都是出于完全不同的原因(即 ssh-agent 没有运行)。

就我而言,我下面有太多键,~/.ssh所以我所做的就是将它们全部移动,除了id_rsa在子目录中:~/.ssh/other_keys。这适用于仅使用命令行选项访问某些计算机的目的,-i如下所示:

ssh -i ~/.ssh/other_keys/topsecret domain

否则,您必须告诉 SSH 不要测试~/.ssh目录中找到的所有密钥(因为当发生这种情况时,它会耗尽尝试次数,而尝试次数通常很小,例如 3 或 5 次。)

要解决此问题,您还可以执行以下操作:

ssh -i ~/.ssh/topsecret -o 'IdentitiesOnly yes' domain

这需要大量的输入(是的,您也可以将其添加到您的配置文件中,但如果这只是为了快速测试,那就很烦人了。)

所以...当我想在这里或那里连接一次时,所有这些都非常有用,但是当我想要访问我的主服务器之一时,这很痛苦,因为ssh现在每次访问时都会要求我输入密码,即使我的ssh-agentssh-askpass已正确设置。

那么...给出了什么?

不知何故,当您启动时,ssh-add它会自动将密钥添加到其中,ssh-agent而无需询问您的密码。然后,一旦您需要使用密钥,它就会自动启动ssh-askpass(顺便说一句,您的环境中不需要该名称的变量),您可以在其中输入密码并继续。

但是,如果密钥是在子目录中定义的,则不会找到它们,因此不会将它们添加到其中,ssh-agent并且当您使用ssh它时,也不会在子目录中找到它们ssh-agent,因此会直接在控制台中要求您输入密码,并且不在 gnome 弹出窗口中。

将键移回正下方~/.ssh可以解决问题,但这并不是一个很好的解决方案,因为它会破坏背面ssh -i ...。 (我知道,可以-o ...选择告诉 ssh 仅使用一个密钥,从而解决其他问题。但我认为 ssh 应该首先使用命令行指定的密钥进行测试,这将解决我的两个问题。哦,好吧... )

所以...当我运行以下命令时:

ssh-add -D

ssh-agent通过以下方式重置密钥:(1) 删除当前存在的所有密钥; (2) 重新安装在下面找到的所有密钥~/.ssh,而不询问我任何密码(至少在我运行命令时不会ssh-add)。

有没有办法要求(或任何其他工具)也添加在不同目录(例如我的子目录)ssh-add中找到的密钥,而无需立即输入所有密码?~/.ssh/other_keys

答案1

这不是一个完整的答案,但如果你查看ssh-agent它的手册页,会有以下段落。

代理最初没有任何私钥。使用 添加密钥ssh-add(1)。当不带参数执行时,ssh-add(1)添加文件~/.ssh/id_rsa~/.ssh/id_dsa~/.ssh/id_ecdsa~/.ssh/identity如果身份有密码,则ssh-add(1)在终端上询问密码(如果有的话),或者从小型 X11 程序(如果在 X11 下运行)询问密码。如果这两种情况都不是,则身份验证将失败。然后它将身份发送给代理。代理中可以存储多个身份;代理可以自动使用这些身份中的任何一个。 ssh-add -l显示代理当前持有的身份。

因此,您可以看到当前加载的键ssh-agent,并且它将默认加载该段落中描述的键。

答案2

也许这个AddKeysToAgent选项(在最新的 OpenSSH 版本中可用)在这种情况下有用?

指定是否应将密钥自动添加到正在运行的 ssh-agent(1)。如果此选项设置为 yes 并且从文件加载密钥,则密钥及其密码短语将以默认生命周期添加到代理中,就像通过 ssh-add(1) 一样。如果此选项设置为询问,则 ssh(1) 将需要在添加密钥之前使用 SSH_ASKPASS 程序进行确认(有关详细信息,请参阅 ssh-add(1))。如果此选项设置为确认,则每次使用该密钥都必须确认,就像为 ssh-add(1) 指定了 -c 选项一样。如果此选项设置为 no,则不会将任何密钥添加到代理。参数必须为 yes、confirm、ask 或 no(默认值)。

相关内容