如何通过“vagrant ssh”使用 ssh 代理转发?
Posted
技术标签:
【中文标题】如何通过“vagrant ssh”使用 ssh 代理转发?【英文标题】:How to use ssh agent forwarding with "vagrant ssh"? 【发布时间】:2012-08-10 22:26:25 【问题描述】:我不想在 vagrant box 上创建新的 SSH 密钥对,而是想重新使用我在主机上拥有的密钥对,使用 agent forwarding。我尝试在 Vagrantfile 中将 config.ssh.forward_agent 设置为 TRUE,然后重新启动 VM,并尝试使用:
vagrant ssh -- -A
...但是当我尝试执行 git checkout 时,仍然会提示输入密码。知道我错过了什么吗?
【问题讨论】:
如果你没有正确的 ssh 密钥,git 不应该询问密码,而是告诉你你已经拒绝了权限。我猜你被要求输入密码是因为你是从 https 而不是 git@github.com (ssh) 克隆的。我的 2 美分。 【参考方案1】:将其添加到 Vagrantfile 中
Vagrant::Config.run do |config|
# stuff
config.ssh.forward_agent = true
end
See the docs
【讨论】:
确保在底层主机上 ssh-add 并且密钥已解密。 请注意,Windows 不会自动启动 ssh-agent,您需要运行它才能转发您的 ssh 密钥。关注this guide 在 Windows 上设置 ssh-agent 自动启动。 这个答案可能不值得这么多票。 OP 明确声明他们将config.ssh.forward_agent
添加到他们的配置文件中,那么这个答案提供了哪些新信息?甚至链接已经在问题中了。
@Trindaz 你说得对。我无法解释为什么这是我最受欢迎的答案之一。然而,这似乎帮助了至少 52 人,所以我不得不称之为胜利。
这个答案确实没有带来任何新信息,但另一方面,它是需要为 Vagrant 提供的机器配置的所有内容。至少前提是您在连接机器上正确设置了代理转发(即转发适用于其他非流浪机器)。【参考方案2】:
在 Windows 上,问题是 Vagrant 不知道如何与 git-bash 的 ssh-agent 通信。但是,它确实知道如何使用 PuTTY 的 Pageant。因此,只要 Pageant 正在运行并加载了您的 SSH 密钥,并且只要您设置了 config.ssh.forward_agent,这应该可以工作。
详情请见this comment。
如果您使用 Pageant,则不再需要 workaround of updating the Vagrantfile to copy SSH keys on Windows。
【讨论】:
【参考方案3】:除了将“config.ssh.forward_agent = true”添加到 vagrant 文件之外,请确保主机计算机已设置为代理转发。 Github 为此提供了good guide。 (查看故障排除部分)。
【讨论】:
【参考方案4】:确保 VM 不会启动自己的 SSH 代理。我的~/.profile
中有这条线
eval `ssh-agent`
删除后,SSH 代理转发工作。
【讨论】:
【参考方案5】:真正的问题是 Vagrant 使用 127.0.0.1:2222 作为默认端口转发。 可以加一个(不是2222,默认2222已经占用)
config.vm.network "forwarded_port", guest: 22, host:2333, host_ip: "0.0.0.0"
“0.0.0.0”是从外部连接请求的方式。 然后 ssh -p 2333 vagrant@192.168.2.101 (改成自己的主机ip地址,dud) 会工作得很好。 谢谢我,就叫我雷锋吧!
【讨论】:
【参考方案6】:如果您在 Windows 上,默认情况下 Vagrant 中的 SSH 转发无法正常工作(由于 net-ssh 中的错误)。请参阅此特定的 Vagrant 错误报告:https://github.com/mitchellh/vagrant/issues/1735
但是,有一个解决方法!只需通过 VagrantFile 中的简单配置脚本将本地 SSH 密钥自动复制到 Vagrant VM。这是一个例子: https://github.com/mitchellh/vagrant/issues/1735#issuecomment-25640783
【讨论】:
【参考方案7】:我在 1.4.3 上处理了上述回复,但在 1.5 上停止了工作。我现在必须运行 ssh-add
才能完全使用 1.5。
现在我将以下行添加到我的 ansible 配置脚本中。
- name: Make sure ssk keys are passed to guest.
local_action: command ssh-add
我还创建了我的设置要点:https://gist.github.com/KyleJamesWalker/9538912
【讨论】:
我一直不得不在 1.4 和 1.5 中使用 ssh-add,否则没有运行代理可以转发【参考方案8】:我在 OS X Mountain Lion 上使用 vagrant 2。
Vagrant.configure("2") do |config|
config.ssh.private_key_path = "~/.ssh/id_rsa"
config.ssh.forward_agent = true
end
config.ssh.private_key_path
是您的本地私钥
您的私钥必须对本地 ssh-agent 可用。您可以使用ssh-add -L
进行检查,如果未列出,请使用ssh-add ~/.ssh/id_rsa
添加它
别忘了将你的公钥添加到 Vagrant VM 上的~/.ssh/authorized_keys
。您可以复制粘贴或使用ssh-copy-id 之类的工具
【讨论】:
我注意到,在上面设置之后,我可以使用“vagrant”用户来“git clone”,但不能使用“root”用户来“git clone”。你知道似乎是什么问题吗?谢谢config.ssh.private_key_path = "~/.ssh/id_rsa"
让 Vagrant 挂在 Waiting for VM to boot
上。
您还需要保留 vagrant insercure 密钥config.ssh.private_key_path = [ '~/.vagrant.d/insecure_private_key', '~/.ssh/id_rsa' ]
在 OS X 上,我发现使用ssh-add -K
(以及config.ssh.forward_agent = true
)将私钥添加到 OS X 密钥链中。 See this answer
我遇到了与@apennebaker 相同的错误。并且按照 Calin 建议的步骤没有帮助......对我有用的是从我的主机操作系统向钥匙串添加密钥并禁用 config.ssh.private_key_path 分配。【参考方案9】:
当我们最近在 Vagrant 1.1.5 中试用 vagrant-aws
插件时,我们遇到了 SSH 代理转发问题。事实证明,Vagrant 强制 IdentitiesOnly=yes
没有将其更改为 no
的选项。这迫使 Vagrant 只查看我们在 Vagrantfile
中为 AWS 提供商列出的私钥。
我在a blog post 中记录了我们的经验。它可能会在某个时候变成拉取请求。
【讨论】:
有没有办法在使用Vagrant up
创建时自动将主机上的底层公钥复制到 Vagrant VM?现在我必须创建机器,手动登录,然后将我的公钥添加到 /home/vagrant/.ssh/authorized_keys以上是关于如何通过“vagrant ssh”使用 ssh 代理转发?的主要内容,如果未能解决你的问题,请参考以下文章
Vagrant 1.9.6挂起命令“vagrant ssh”