capistrano 3不会将$ USER传递给远程ssh

时间:2016-11-24 21:43:51

标签: git ssh capistrano

在Capistrano 2中,可以设置repo URL以包含登录用户名,如:

set :repo_url, "git+ssh://#{ENV['LOGNAME']}@myrepo.example.com/path/name"

这样做的目的是$ LOGNAME使用它们来访问repo 帐户,并获得他们的正常权限。部署服务器上的登录名不是$ {LOGNAME},这很好。

虽然可以使用capistrano 3执行此操作,但它适用于原始用户X,因为它们填充了../repo/.git/config,但是对于下一个用户失败,因为用户Y无法登录myrepo .example.com为X. 这在Capistrano 2中有效,因为每次都会检查出新的git repo。 cap3方式更有效率,但我不知道该怎么做。如果/tmp/git-ssh-deploy-staging-user.sh脚本将添加-l用户 对于ssh命令行,一切都会好的,但是我没有看到任何添加它的内容。

我已经在我们的repo服务器上创建了一个“部署”用户,并赋予它对repo的只读权限,但我并不是非常热衷于此作为可扩展的解决方案,因为它需要$ ADMIN用repo搞定,而不是让devops人做他们的事。

我正在寻找建议?也许它只是在代码中,我还没有找到选项。

1 个答案:

答案 0 :(得分:0)

使用我的deploy.rb的这个补丁,我得到一个正确设置了-l选项的/tmp/ssh-blah-git.sh。

我无法覆盖现有的那个,因为我认为它还没有加载,所以我试图在正式任务之后运行我的任务,但官方的任务在我的任务后第二次运行(a总共三次......)所以我清楚了。

namespace :git do
  desc "Upload the git wrapper script, this script guarantees that we can script git without getting an interactive prompt"
  task :better_wrapper do
    #puts "BETTER"
    on release_roles :all do
      execute :mkdir, "-p", File.dirname(fetch(:git_wrapper_path))
      upload! StringIO.new("#!/bin/sh -e\nexec /usr/bin/ssh -l #{ENV['LOGNAME']} -o PasswordAuthentication=no -o StrictHostKeyChecking=no \"$@\"\n"), fetch(:git_wrapper_path)
      execute :chmod, "700", fetch(:git_wrapper_path)
    end
    #puts "BETTER2"
    Rake::Task['git:wrapper'].clear_actions
  end

  after :wrapper, "git:better_wrapper"
end