Shr*_*ans 14 git ssh chef-infra vagrant
我有一个使用vagrant运行的vm,我正在使用Chef配置它.其中一个步骤涉及克隆git repo,但我的ssh-key(在我的主机上)上有一个密码.
当我运行时vagrant up,该过程在git clone步骤失败,并出现以下错误:(
Permission denied (publickey). fatal: The remote end hung up unexpectedly
已在主机上添加密钥,带密码)
我试图使用ssh代理转发来解决这个通过执行以下操作:
添加config.ssh.forward_agent = true到VagrantFile
添加Defaults env_keep = "SSH_AUTH_SOCK到/etc/sudoers虚拟机上
现在,vagrant up当它到达git clone部分时仍然失败,但如果我vagrant provision在那之后运行,它会通过.我猜这是因为ssh配置是在vm启动时设置的,不会重新加载
我已经尝试在调整这两个设置后重新加载ssh,但这没有帮助.
不知道怎么解决这个问题?
谢谢.
小智 10
正如您所指出的那样,在初始运行期间更新sudoers为时已晚,无法有利于该运行,因为此时厨师已经在sudo下运行.
相反,我编写了一个hacky配方,找到要使用的相应ssh套接字并更新SSH_AUTH_SOCK环境以适应.它还禁用严格的主机密钥检查,以便自动批准初始出站连接.
将其保存为在第一个ssh连接之前的任何时间执行的配方(使用Ubuntu测试但应该与其他发行版一起使用):
Directory "/root/.ssh" do
action :create
mode 0700
end
File "/root/.ssh/config" do
action :create
content "Host *\nStrictHostKeyChecking no"
mode 0600
end
ruby_block "Give root access to the forwarded ssh agent" do
block do
# find a parent process' ssh agent socket
agents = {}
ppid = Process.ppid
Dir.glob('/tmp/ssh*/agent*').each do |fn|
agents[fn.match(/agent\.(\d+)$/)[1]] = fn
end
while ppid != '1'
if (agent = agents[ppid])
ENV['SSH_AUTH_SOCK'] = agent
break
end
File.open("/proc/#{ppid}/status", "r") do |file|
ppid = file.read().match(/PPid:\s+(\d+)/)[1]
end
end
# Uncomment to require that an ssh-agent be available
# fail "Could not find running ssh agent - Is config.ssh.forward_agent enabled in Vagrantfile?" unless ENV['SSH_AUTH_SOCK']
end
action :create
end
Run Code Online (Sandbox Code Playgroud)
或者,创建一个包含sudoers update的框,并将未来的VM作为其基础.
| 归档时间: |
|
| 查看次数: |
6348 次 |
| 最近记录: |