ssh 强制用户使用用户 ssh-add

ssh 强制用户使用用户 ssh-add

我正在尝试了解此功能的工作原理。我有数字海洋帐户。我已为数字海洋提供了一个 ssh 公钥,以便与我启动的任何服务器关联。创建 droplet 后,如果我尝试以 root 身份 ssh 到服务器,则会失败,但如果我执行 ssh-add 并为其提供我在数字海洋帐户中定义的特定密钥,则它允许我登录。如果我添加另一个用户帐户并在该帐户的 authorized_hosts 文件中放入不同的公钥,我将能够在不使用 ssh-add 的情况下登录。

有人能向我解释一下这个功能是如何工作的吗?如何强制用户使用 ssh-add?

编辑:我进行了详细的 ssh,它似乎只尝试了这些密钥,但没有尝试我 .ssh 目录中的任何其他密钥,包括我为 digital ocean 设置的密钥。我怀疑这可能是问题的一部分。

debug1: Authentications that can continue: publickey
debug1: Trying private key: /Users/username/.ssh/id_dsa
debug3: no such identity: /Users/username/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /Users/username/.ssh/id_ecdsa
debug3: no such identity: /Users/username/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /Users/username/.ssh/id_ed25519
debug3: no such identity: /Users/username/.ssh/id_ed25519: No such file or directory
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.

答案1

我认为从概念上讲,您混淆了运行 SSH 代理与向已运行的 SSH 代理添加密钥的想法。

通常,将 SSH 密钥添加到会话的工作流程如下:

  1. 执行 ssh-agent $SHELL,其中 $SHELL 可以是等bashzsh如下所示ssh-agent bash
  2. 使用以下方式将特定私钥与代理 shell 会话关联ssh-add
  3. 连接到任何拥有您在 shell 会话中使用的私钥的特定公钥的主机authorized_hosts

请注意,您可以ssh-add -l随时使用它来查看已加载的密钥。

因此,在这种情况下,您能够连接的原因是您使用ssh-add密钥添加到当前会话中,当您尝试通过 ssh 进行 ssh 时,将自动检查该密钥account@host

您可以看到一个这样的示例,如果您使用以下命令在 SSH 尝试中添加详细程度标志,则可以进行检查-v(vvv)

debug1: Offering RSA public key: /home/patrick/.ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 60
debug1: Server accepts key: pkalg rsa-sha2-512 blen 279

仅通过-v此操作,我即可获得以下内容:(添加更多 v 会增加获得的调试详细程度)

debug1: Offering RSA public key: /home/patrick/.ssh/id_rsa
debug1: Server accepts key: pkalg rsa-sha2-512 blen 279
debug1: Authentication succeeded (publickey).

您的初始 SSH 会话在没有执行任何操作的情况下失败的原因ssh-add可能是因为您的密钥存储在特定目录中,默认情况下不会通过 SSH 检查该目录。但是,当您执行时,ssh-add您会将密钥添加到整个会话中,SSH 知道默认情况下使用该密钥,而不是搜索~/.ssh或其他地方。

根据SSH 手册页

-i 身份文件

选择一个文件,从中读取 RSA 或 DSA 身份验证的身份(私钥)。对于协议版本 1,默认为 ~/.ssh/identity,对于协议版本 2,默认为 ~/.ssh/id_rsa 和 ~/.ssh/id_dsa。还可以在配置文件中按主机指定身份文件。可以有多个 -i 选项(并在配置文件中指定多个身份)。

因此,如果您的密钥的名称不是上述文件名,或者位于其他位置,则 SSH 将看不到它,除非您专门使用标志-i来指示路径和文件名,或者您使用ssh-add它将其添加到您的会话中。

您可以使用-iSSH 标志测试您的密钥来验证这一理论。如果您执行该操作,ssh -i $KEYLOCATION account@host您应该会成功登录。

仔细检查您的私钥文件是否已存在,~/.ssh并且命名为 id_rsa 或任何可能的密钥类型。有了它,您可能就不必ssh-add在将来执行。

相关内容