为什么 SSH 总是使用服务器接受的第一个密钥?

为什么 SSH 总是使用服务器接受的第一个密钥?

我有三个 SSH 密钥对,可以通过 找到ssh-add -L;远程服务器接受两个密钥,但只有一个密钥可用于 GitHub,我想通过代理转发克隆 GitHub 存储库(托管限制阻止部署密钥发挥作用)

  • 以下无法登录 GitHub,我发现 SSH 可能使用id_rsa通过 列出的第一个密钥 [ ] ssh-add -L,忽略了我的-i命令,因此只有在删除密钥后代理转发才有效id_rsa
    ssh -A -tt -i ~/.ssh/id_rsa_github user@ip 'ssh -T [email protected]'
    
  • 尝试过添加IdentityFileIdentitiesOnly~/.ssh/config但也没有成功

这是正常行为吗?我该如何强制 SSH 使用特定密钥?

答案1

我认为这是正常的。代理已经知道一些密钥。然后-i是 的一个选项ssh,它不会直接影响代理。当被问到时,ssh可以向代理添加密钥,但没有直接的方法可以删除密钥或更改其顺序。此外,代理旨在为许多客户提供服务。其中一些可能需要您想要从此特定ssh连接“隐藏”的密钥。您需要一种略有不同的方法。

运行本地ssh作为投入的代理,然后让ssh所需的密钥添加到代理。这样,密钥将是相关代理唯一知道的密钥。使用通用代理(如果有)的进程将不受影响。

ssh-agent ssh -A -tt -o AddKeysToAgent=yes -i ~/.ssh/id_rsa_github user@ip 'ssh -T [email protected]'

man 1 ssh-agent

command [arg ...]
如果给出了命令(和可选参数),则该命令将作为代理的子进程执行。当命令行上给出的命令终止时,代理将自动退出。

[…]

[…] 代理启动一个命令,根据该命令导出其环境变量 […]

[…]

[…]ssh(1)查看这些环境变量并使用它们建立与代理的连接。

代理最初没有任何私钥。使用ssh-add(1)或通过ssh(1)设置来AddKeysToAgent添加密钥ssh_config(5)。[…]

man 1 ssh

-o option
可用于以配置文件中使用的格式提供选项。

man 5 ssh_config

AddKeysToAgent
指定是否应将密钥自动添加到正在运行的ssh-agent(1)。如果将此选项设置为yes,并且密钥是从文件加载的,则密钥及其密码将以默认生存期添加到代理,就像 一样ssh-add(1)

相关内容