哪些私钥不用配置就通过ssh测试?

Ber*_*ach 6 ssh ssh-agent

我知道有几个关于 ssh 密钥以及如何配置它的问题。但我发现没有人回答我的问题。

所以这里是:我的.ssh目录中有几个 ssh 密钥。对于一些遥控器不同的键。

现在我既没有配置.ssh/config哪个密钥用于哪个主机,也没有手动将它们添加到代理中,这里已经提到了一些问题。我刚刚创建了密钥,ssh-keygen它可以工作。

现在我想知道谁对此负责以及自动尝试哪些键?我有一些想法说大约有五个键会自动检查兼容性 - 但我找不到在哪里找到这些信息。

是否ssh-keygen自动将这些密钥添加到代理?还是默认情况下 ssh 会搜索任何匹配的密钥?

Jav*_*era 8

ssh 客户端将检查您的所有密钥,直到找到匹配的密钥。

这就是它的工作原理(这是非常简化的,在此之前已经进行了非常复杂的舞蹈来加密所有这些):

  • 服务器创建一个身份验证令牌。
  • 令牌使用您在服务器上的公钥进行加密。
  • 服务器将加密的令牌发送给客户端。
  • 客户端尝试使用所有已知的私钥解密令牌。
  • 如果成功,它会将解密的令牌发送回服务器。
  • 如果令牌匹配,服务器将让客户端进入。

哪些文件是密钥取决于客户端。

对于 Openssh 客户端(Ubuntu 默认客户端),根据其手册页,应该是私钥的文件是 ./sshid_rsa、.ssh/id_dsa、.ssh/id_ecdsa,以及在 -i 标志之后给出的文件(它支持多个文件)和那些在配置文件中声明的文件。

您可以为其提供 -v 选项,使其在尝试使用任何文件作为密钥时打印一行。这是非密钥登录的示例:

$ ssh -v www.hostremoved.com
OpenSSH_5.9p1 Debian-5ubuntu1, OpenSSL 1.0.1 14 Mar 2012
debug1: Reading configuration data /etc/ssh/ssh_config
<...>
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/javier/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/javier/.ssh/id_dsa
debug1: Trying private key: /home/javier/.ssh/id_ecdsa
debug1: Next authentication method: password
<...>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它打印了它尝试的所有键,但都失败了。您可以在您的系统中使用它来发现 ssh 在您自己的系统中使用了哪些文件。

如果找到并尝试了某些现有密钥,您可以在下面看到输出

debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: user@xyz
Run Code Online (Sandbox Code Playgroud)

user@xyz 是附加到公钥的信息。


如果您想知道您的 ssh 客户端如何找到您的私钥,这并不神奇。在 Gnome(xfce 和 KDE 也是如此)下,有一个特殊的 ssh-agent 可以自动在.ssh目录中添加密钥,这些密钥具有以.pub.

如果您没有这么舒服的 ssh 代理,则必须使用ssh-add key.