关于ssh代理转发有很多答案,但我似乎无法找到解决我的问题的答案。
我正在使用packer.io自动配置我的服务器。我正在使用的其中一个构建器是virtualbox-iso
构建器,允许我为本地测试创建一个Vagrant框。
我的主机是一台Macbook Pro,我已经使用以下命令向ssh-agent添加了两个ssh密钥:ssh-add -K ~/.ssh/id_rsa
。我可以验证它们是否与ssh-add -l
和ssh-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.org
或ssh -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
)额外的键并在需要时添加它们,但这显然不太理想。
有什么想法吗?
答案 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#了解更多详细信息