ssh 会自动加载 `.ssh` 中的所有内容吗?

ssh 会自动加载 `.ssh` 中的所有内容吗?

根据以下邮政,似乎当您通过 ssh 进入一个框时,默认情况下它会加载所有密钥(公钥和私钥)~/.ssh以便在我连接的服务器上进行身份验证。

这是真的吗?还是您必须配置~/.ssh/config文件并将IdentifyFiles映射到服务器?

我试图了解身份验证如何在本地机器上使用多个私钥进行工作。

答案1

我假设您的意思是您想在客户端而不是服务器上使用多个私钥。默认情况下,ssh 客户端会加载:

对于协议版本 1

~/.ssh/identity 

对于协议版本 2:

~/.ssh/id_dsa
~/.ssh/id_ecdsa
~/.ssh/id_ed25519
~/.ssh/id_rsa 

它将尝试所有这些键(直到第一个成功)。

如果您想添加其他键,您有两个选择:

1. 通过 ~/.ssh/config 添加每个主机选择

你已经提到过这一点,所以我假设你很熟悉它。简而言之,它看起来像这样:

Host host1
    HostName host1.example.com
    IdentityFile ~/.ssh/id_rsa_host1

Host host2
    HostName host2.example.com
    IdentityFile ~/.ssh/id_rsa_host2

2. 使用 ssh-agent

配置 ssh-agent(谷歌上有很多文档,例如http://mah.everybody.org/docs/ssh),它是 OpenSSH 默认自带的。您可以通过

ssh-add -i $KEY_FILE

每个私钥。

3. 手动操作

使用 -i 选项启动 ssh 客户端来选择要使用的密钥。

ssh -i $KEY_FILE

我建议使用选项 2(ssh-agent),它还可以为您带来一些好处,但这完全取决于您的情况。

答案2

根据手册:

 ~/.ssh/identity
 ~/.ssh/id_dsa
 ~/.ssh/id_ecdsa
 ~/.ssh/id_ed25519
 ~/.ssh/id_rsa
         Contains the private key for authentication.  These files contain
         sensitive data and should be readable by the user but not acces‐
         sible by others (read/write/execute).  ssh will simply ignore a
         private key file if it is accessible by others.  It is possible
         to specify a passphrase when generating the key which will be
         used to encrypt the sensitive part of this file using 3DES.

所以是的,ssh 将加载所有这些密钥。如果您有需要特定密钥才能连接的服务器,您确实应该在 ~/.ssh/config 中配置该主机。

请注意,不需要有多个密钥对。您的公钥是公开的,可以安全地附加到您连接的所有服务器中的 ~/.ssh/authorized_keys 文件中。没有您的私钥,任何人都无法使用它做任何事情。

唯一可能需要为一个服务器使用不同密钥的情况是,如果您无权访问您的 authorized_keys 文件(因为它是 sftp 或 scp 或 rsync 服务器)并且您想要重用您已经配置的密钥对。

相关内容