编辑:请参阅下面的答案,我的假设是错误的。
如果我的 SSH 配置中有以下内容(~/.ssh/config
在 OS X 上),这是否存在安全风险?
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/my-secret-key.pem
我的理解是,我会将我的密钥发送给我ssh
进入的任何主机。它是否正确?如果是,这是否存在安全风险?理论上主机可以尝试使用我的密钥登录一些主要的 SSH 主机(如 GitHub)吗?
如果我指定HostName
,我认为密钥仅发送到该主机是否正确:
Host *
HostName github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/my-secret-key.pem
这为 GitHub 设置 SSH 的官方文档似乎建议使用第一个配置...
答案1
SSH 可以不是将您的私钥发送到服务器。该机制基于使用实体拥有的内容进行计算 - 服务器根据公钥计算某些内容,客户端根据私钥计算某些内容(请参阅这个信息安全堆栈交换帖子了解更多)。
在任何情况下,无论您是否将密钥添加到代理,SSH 都会尝试所有密钥,直到其中一个成功为止。除非您有代理转发设置,否则我认为无论如何都没有什么用服务器能够使用添加到代理的密钥。
Host *
HostName github.com
AddKeysToAgent yes
这会将Hostname
every设置Host
为github.com
,这肯定不是您想要做的事情(这意味着ssh foo.bar
将连接到github.com
)。如果您只想将某些配置应用于 的连接github.com
,请使用它作为Host
模式:
Host github.com
IdentityFile ~/.ssh/my-secret-key.pem
是否存在安全风险取决于您要防御的对象是谁。如果您的 SSH 密钥受密码保护,并且其他人能够访问您系统上的 SSH 代理,当然,一旦将所有受密码保护的密钥添加到代理中,就会打开这些密钥进行访问。
但我想说这种威胁不太可能发生。