【问题标题】:use ssh private key from host in vagrant guest在 vagrant guest 中使用来自主机的 ssh 私钥
【发布时间】:2014-07-10 15:58:30
【问题描述】:

我想在配置 vagrant box 的同时克隆一堆私有 git 存储库。根据this article,这应该可以使用config.ssh.forward_agent = true。但是,当尝试通过 ssh -T git@github.com -o StrictHostKeyChecking=no 之类的方式连接到 github 时,它会失败并出现以下错误:

警告:将 'github.com,192.30.252.130' (RSA) 永久添加到已知主机列表中。 权限被拒绝(公钥)。

我将我的配置缩减为最简单的配置。你可以在这里找到它:https://gist.github.com/TomTasche/31f7c45fcffc2997d43a

当我执行“vagrant ssh”并再次尝试时,会出现类似的错误:

正在克隆到“私有存储库”... 警告:将 IP 地址“192.30.252.130”的 RSA 主机密钥永久添加到已知主机列表中。 权限被拒绝(公钥)。 致命:远端意外挂断

编辑:上面链接的配置可以在运行 Ubuntu 的主机上运行,​​但在 Mac 主机和 Windows 主机上都不起作用。我的目标是有一个适用于所有这三个主机的配置。

【问题讨论】:

    标签: vagrant


    【解决方案1】:

    请检查您的主机系统是否启用了 ssh-agent 转发。例如,您可以将此块添加到您的 ~/.ssh/config 文件中:

    Host                    *
      ForwardAgent          yes 
    

    如果启用此功能,vagrant ssh(以及vagrant provision)应该能够将您的密钥转发到客户机。

    您可能还想使用ssh-add -l 检查您的 ssh 代理是否知道您的 SSH 密钥。如果它在列表中并且您已激活代理转发,您应该会成功。否则,您可以通过运行 ssh-add <path to your key file> 将密钥添加到您的 ssh-agent。

    【讨论】:

    • 感谢您的回答!遵循上述说明后,我可以在vagrant ssh 中通过 ssh 进行身份验证。但是,我的配置脚本仍然失败,并出现以下错误:Error reading response length from authentication socket. Permission denied (publickey).
    • 是的,几天前我们在办公室也遇到过这种情况……它在没有实际行动的情况下继续工作……文档说 config.ssh.forward_agent = true 结合 ssh-agent 转发应该可以工作,但我们没有t设法找到它为什么不起作用......:/
    • 嗯,如果它不能在所有平台上运行,那将破坏将我的开发环境移动到容器中的整个概念。无论如何,感谢您的帮助!也许其他人想出了一个解决方案......
    • 谢谢老兄,您的答案在 Linux 和 Mac 上都可以完美运行。 Windows 无法按预期工作,但@Tim Donohue 有一个解决方案!
    • Github 强烈反对这种做法! “警告:您可能很想使用像 Host * 这样的通配符来将此设置应用于所有 SSH 连接。这并不是一个好主意,因为您将与您通过 SSH 连接的每台服务器共享您的本地 SSH 密钥。他们赢了“没有直接访问密钥的权限,但在建立连接时他们将能够像您一样使用它们。您应该只添加您信任的服务器,并且您打算将其用于代理转发。” developer.github.com/guides/using-ssh-agent-forwarding
    【解决方案2】:

    听起来您可能遇到了这个特定的错误: https://github.com/mitchellh/vagrant/issues/1735 (尽管它被“关闭”了,但它实际上并没有固定

    在 Windows 上,默认情况下 Vagrant 中的 SSH 转发无法正常工作(由于 net-ssh 中的错误)。

    但是,有一种解决方法或简单的破解方法。您可以通过 VagrantFile 中的简单配置脚本将本地 SSH 密钥自动复制到 Vagrant VM。这是一个例子: https://github.com/mitchellh/vagrant/issues/1735#issuecomment-25640783

    【讨论】:

    • 我很想在你和@Knut 之间分红,但他的回答让我能够在 Mac 和 Linux 上运行 SSH 代理转发。不过,您的答案在 Windows 上是正确的!非常感谢!
    【解决方案3】:

    汤姆,

    你所做的在本质上是相当通用的,我不认为是 Vagrant 特定的。

    尝试以下一些方法来追踪问题:

    1. 编辑您的/etc/ssh/sshd_config
    2. 设置LogLevel debug
    3. 重启sshd服务sudo service sshd restart/etc/init.d/sshd restart
    4. tail -f /var/log/authlog -- 请注意,该文件可能是 /var/log/authd.log/var/log/secure 之类的其他名称。
    5. 观察连接时会发生什么。它应该可以告诉您失败的原因。

    再次抱歉,我对Vagrant 不太熟悉,但我想知道配置脚本是否以其他用户身份运行,在这种情况下代理转发可能无法按预期工作?

    【讨论】:

    • 据我所知,配置脚本以 root 身份运行。这实际上似乎是我的问题的原因,但建议的解决方法也不起作用:github.com/mitchellh/vagrant/issues/1303
    • 如果有人有问题,文件是 Ubuntu 14.04 上的 /var/log/auth.log
    猜你喜欢
    • 2017-08-07
    • 2014-02-14
    • 1970-01-01
    • 2014-07-29
    • 2012-02-17
    • 2012-11-14
    • 1970-01-01
    • 2019-04-23
    • 2015-04-12
    相关资源
    最近更新 更多