我正在尝试构建一个环境,当它完成启动虚拟机时,它会将存储库克隆到共享目录中。问题是该框没有远程存储库的 SSH 权限。
我有一个简单的 bash 脚本:
#!/bin/bash
cd /vagrant
if [ ! -d "repo" ]; then
git clone [email protected]:/my/repo.git
end
我收到错误:
主机密钥验证失败。
致命:远端意外挂断
这是有道理的,因为/home/vagrant/.ssh
我谷歌搜索了好久,但都无济于事。我尝试设置,config.ssh.forward_agent = true
这样当我通过 ssh 进入机器时,我可以手动克隆 repo,但当机器尝试自行运行时,则不行。我还尝试指定,config.ssh.private_ssh_key = "~/.ssh/id_rsa"
但 vagrant 根本无法完成加载(我假设应用程序无法通过 ssh 进入机器)。
所以我的问题是......我是否需要重建基本盒以包含一组密钥并使用我的远程存储库授权这些密钥?或者我是否缺少更简单的解决方案?
注意:我看过Vagrant VM 上的 SSH 基础知识它们看起来很相似,但我认为这更多的是关于在盒子上设置不同的用户,并且发布的解决方案比我想要的更手动。
答案1
对我来说,临时解决方案是生成一组密钥并将它们放在与 相同的目录中Vagrantfile
,然后在配置时将密钥复制到 中/root/.ssh/
。这有一个小问题,那就是我还必须生成一个known_hosts
文件,以便 VM 接受来自远程服务器的连接。该known_hosts
文件也位于 /vagrant/.ssh/ 目录中,并与密钥一起复制,现在一切都正常了。
最终,当我不尝试通过不稳定的 Wi-Fi 将 1GB 的盒子上传到我的文件主机时,真正的解决方案是将这些文件永久包含在基本盒子中。
答案2
这里有一些关于此的内容:https://serverfault.com/questions/107187/ssh-agent-forwarding-and-sudo-to-another-user- 总结是 SSH 转发通过 不保留的环境变量工作su
。建议使用不同级别的 Unix-fu 解决方案;我选择了一种便宜而愉快的解决方案:
su -c "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK; CMD" -l vagrant
CMD
您要运行的命令在哪里。
这样,我就可以在配置期间git clone
以身份运行vagrant
,这样我就可以使用 OS X 主机系统中的公共 SSH 密钥克隆 GitHub/Bitbucket 存储库,而无需将所有内容都归root
。 唯一需要的其他步骤是预先填充~/.ssh/known_hosts
任何所需的密钥(我想您已经在这样做了)。
(与真实系统上的情况不同(请参阅对答案的评论,建议这一点 -https://serverfault.com/a/371788/321408),无需更改套接字权限,因为它已经归属于vagrant
- 我认为该vagrant ssh
机制会为您处理。因此,我认为这样做不会带来任何安全问题。)