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

时间:2017-06-27 23:34:07

标签: git ssh vagrant virtual-machine ssh-agent

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

我正在使用packer.io自动配置我的服务器。我正在使用的其中一个构建器是virtualbox-iso构建器,允许我为本地测试创建一个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 key。

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

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

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

但是不要在那里复制私钥。引用公钥应该可以胜任,因为它们允许ssh尝试该密钥并从ssh-agent中选择正确的密钥。

答案 1 :(得分:0)

事实证明,我的钥匙不在代理中,并且此问题已得到解决:

OS X:

ssh-add -K Linux / Unix:

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

ssh-add -l <​​/ p>

ssh-add -L#了解更多详细信息