Webistrano ssh 代理
我有一个 Webistrano 设置,它使用自己的私钥/公钥对进行部署。我想利用 :remote_cache
策略的简单性,但不想将私钥复制到部署服务器。
这么长时间以来,我已经设置了这些任务:
namespace :ssh do
task :start_agent do
ssh_options[:forward_agent] = true
result = `ssh-agent -t 600`
# Extract env variables
%w(SSH_AUTH_SOCK SSH_AGENT_PID).each do |key|
if result =~ /#{key}=(.*?);/
ENV[key] = $1
end
end
cmd = "ssh-add #{ssh_keys}"
result = `cmd`
end
task :stop_agent do
# Kill the agent started previously
`ssh_agent -k $SSH_AGENT_PID`
end
end
before 'deploy', 'ssh:start_agent'
这个 before :deploy
似乎工作了一半,但我有几个问题:
- 我需要在部署后(以及部署失败后)停止代理。是否有任何回调可以挂接
ssh:stop_agent
任务? -
deploy:update_code
任务失败并出现错误无法解析存储库“[email protected]:base/mms.git'
有人能解释一下吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
为了回答我自己的问题,我通过 cron
@reboot
从外部启动 ssh-agent 并将其绑定到预先知道的套接字并将 webistrano 密钥添加到该代理:这样我就可以编写一个简单的 Webistrano配置 ENV 使用该套接字的配方:
To answer my own question, I resorted to externally start ssh-agent via cron
@reboot
and bind it to a pre-known socket and add webistrano key to that agent:So that I can write a simple Webistrano recipe that configures ENV to use that socket: