如何通过“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 代理转发问题。事实证明,Vag​​rant 强制 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”

Vagrant ssh 身份验证失败

Htop 在“VIRT”中为“vagrant ssh”说“530G”

vagrant ssh 的问题:终止,1 个错误的配置选项

第一次在终端输入vagrant ssh

vagrant ssh try