我知道有几个关于 ssh 密钥以及如何配置它的问题。但我发现没有人回答我的问题。
所以这里是:我的.ssh目录中有几个 ssh 密钥。对于一些遥控器不同的键。
现在我既没有配置.ssh/config哪个密钥用于哪个主机,也没有手动将它们添加到代理中,这里已经提到了一些问题。我刚刚创建了密钥,ssh-keygen它可以工作。
现在我想知道谁对此负责以及自动尝试哪些键?我有一些想法说大约有五个键会自动检查兼容性 - 但我找不到在哪里找到这些信息。
是否ssh-keygen自动将这些密钥添加到代理?还是默认情况下 ssh 会搜索任何匹配的密钥?
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.