如何让 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 -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 密钥。
这似乎让我的代理转发在某种程度上在我的 VM 上工作,但是,它总是选择我的 ssh-agent 中的第一个条目。
如果我尝试:ssh -T git@work.bitbucket.org
或 ssh -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 # 了解更多详情
有很多关于 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 -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 密钥。
这似乎让我的代理转发在某种程度上在我的 VM 上工作,但是,它总是选择我的 ssh-agent 中的第一个条目。
如果我尝试:ssh -T git@work.bitbucket.org
或 ssh -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 # 了解更多详情