我知道关于 ssh 密钥及其配置方法有很多问题。但我找不到任何可以回答我问题的内容。
就是这样:我的.ssh
目录中有几个 ssh 密钥。对于某些远程设备,有不同的密钥。
现在我既没有配置.ssh/config
哪个密钥用于哪个主机,也没有手动将它们添加到代理,这里已经提到了一些问题。我刚刚创建了密钥,ssh-keygen
它就可以正常工作了。
现在我想知道谁负责这件事,哪些密钥会自动尝试?我脑子里有这样的想法:大约有五个密钥会自动检查兼容性 - 但我找不到在哪里找到这些信息。
是否会ssh-keygen
自动将这些密钥添加到代理?或者 ssh 默认搜索任何匹配的密钥?
答案1
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
<...>
如您所见,它打印了尝试的所有密钥,但全部失败。您可以在系统中使用它来发现 ssh 在您自己的系统中使用了哪些文件。
如果找到并尝试了某个现有密钥,您可以在下面看到输出
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: user@xyz
user@xyz
是附加在公钥上的信息。
如果您想知道 ssh 客户端如何找到您的私钥,那没什么神奇的。在 Gnome(xfce 和 KDE 也一样)下,有一个特殊的 ssh 代理,它会自动在.ssh
目录中添加具有以 结尾的对应公钥的密钥.pub
。
如果您没有如此舒适的 ssh 代理,您将必须使用 添加您的私钥ssh-add key
。
答案2
假设您已将公钥复制到authorized_keys
远程计算机上的文件中,则 ssh 客户端将检查本地计算机上的哪个私钥与远程计算机上的公钥匹配。
答案3
从 openssh-client 1:5.3p1-3ubuntu7 中的 ssh_config(5) 复制/粘贴:
身份文件
指定从中读取用户的 RSA 或 DSA 身份验证身份的文件。对于协议版本 1,默认为 ~/.ssh/identity,对于协议版本 2,默认为 ~/.ssh/id_rsa 和 ~/.ssh/id_dsa。此外,身份验证代理所代表的任何身份都将用于身份验证。
文件名可以使用波浪号语法来指代用户的主目录或以下转义字符之一:“%d”(本地用户的主目录)、“%u”(本地用户名)、“%l”(本地主机名)、“%h”(远程主机名)或“%r”(远程用户名)。
可以在配置文件中指定多个身份文件;所有这些身份将按顺序尝试。
归根结底,这取决于协议版本。对于版本 2(目前最有可能),将根据上述文档按顺序尝试 id_rsa 和 id_dsa。较新的版本可能默认包含其他类型的密钥,如 id_ecdsa。请查看您版本中的手册页以了解详细信息。