如何让 ssh 代理转发在虚拟机上使用多个帐户?

How to get ssh agent forwarding working with multiple accounts on a vm?

有很多关于 ssh 代理转发的答案,但我似乎找不到能解决我的问题的答案。

我正在使用 packer.io to automate the provisioning of my servers. One of the builders I am using is the virtualbox-iso builder to allow me to create a Vagrant 盒子进行本地测试。

我的主机是一台 Macbook Pro,我使用如下命令向 ssh-agent 添加了两个 ssh 密钥:ssh-add -K ~/.ssh/id_rsa。我可以验证它们都存在 ssh-add -lssh-add -L.

其中一个密钥是我的工作bitbucket 帐户,另一个是我的个人帐户。我想专门针对此特定 VM 上的工作帐户。在我的主机上,我在 ~/.ssh/config 下创建了一个配置,内容如下:

Host work.bitbucket.org
  User workuser
  ForwardAgent yes
  IdentitiesOnly yes
  IdentityFile ~/.ssh/id_rsa

Host bitbucket.org
  User homeuser
  ForwardAgent yes
  IdentitiesOnly yes
  IdentityFile ~/.ssh/id_rsa_personal

然后我可以通过以下方式使用我的工作密钥登录我的主机: ssh -T git@work.bitbucket.org 和我的主页键 ssh -T git@bitbucket.org.

现在是 VM...

按照我从其他答案中找到的说明,我已将 config.ssh.forward_agent = true 添加到我的 Vagrantfile。

我还在我的一个供应脚本中执行以下操作:

echo "updating known_hosts folder"
ssh-keyscan work.bitbucket.org >> ~/.ssh/known_hosts

echo "adding bitbucket key from file"
sudo cat /input/rsa.txt >> ~/.ssh/authorized_keys

第一个命令使我可以避免以后将密钥添加到我的 known_hosts 文件中的任何提示。第二个命令只是从上一步上传的文件中附加我的工作 rsa 密钥。

这似乎让我的代理转发在某种程度上在我的 VM 上工作,但是,它总是选择我的 ssh-agent 中的第一个条目。

如果我尝试:ssh -T git@work.bitbucket.orgssh -T git@bitbucket.org,我总是会得到 ssh-add -l 中列出的第一个密钥。 (我实际上通过添加和删除键来操作顺序来验证这一点)

我认为这是因为我在盒子上时已经在 ssh 会话中。所以我查看了 this question 来验证 vagrant ssh 是如何工作的。我试图用 127.0.0.1:PORT 操作我的主机 config 文件,其中 PORT 是我的机器所在的特定端口。我还尝试在我的 VM 上添加一个通配符 config 以允许跃点,但我显然没有正确设置某些东西,因为它仍然无法按预期工作。

现在我可以手动删除(ssh-add -d pathtokeytoremovehere)多余的键并在需要时将它们添加回去,但这显然不理想。

有什么想法吗?

您正在转发 ssh-agent,而不是负责为您选择正确密钥的本地配置。要使其正常工作,您还必须将配置复制到服务器。

但不要将私钥复制到那里。引用 public 键应该可以完成这项工作,因为它们将允许 ssh 尝试该键并从 ssh-agent.

中选择正确的键

原来我的密钥不在代理中,这修复了它:

OS X:

ssh-add -K Linux/Unix:

ssh-add -k 您可以使用以下方式列出加载的密钥:

ssh-add -l

ssh-add -L # 了解更多详情