Capistrano + ssh + git:'cap shell''git remote-ls'没关系,但'cap deploy'属于“权限被拒绝(公钥)”

时间:2014-01-17 15:55:32

标签: git ssh capistrano

我想在本地计算机(LOCAL_MACHINE)上运行cap deploy,在虚拟机上进行部署(vagrant)(DEPLOY_SERVER)。来源位于第三个远程机器上的git存储库(GIT_SERVER)。

当我在LOCAL_MACHINE上运行cap staging deploy:update时,它连接到DEPLOY_SERVER,执行一些操作并尝试执行命令

git ls-remote ssh://git@GIT_SERVER:7999/path/to/repo.git

结束于:

executing locally: " git ls-remote ssh://git@GIT_SERVER:7999/path/to/repo.git staging"
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
*** [deploy:update_code] rolling back
* executing "rm -rf /var/www/sites/my_site_staging/releases/20140117154348; true"
   servers: ["localhost"]
   [localhost:2222] executing command
  command finished in 71ms
Command  git ls-remote ssh://git@GIT_SERVER:7999/path/to/repo.git staging returned status code pid 4956 exit 128

但是当我在LOCAL_MACHINE上运行capistrano shell cap shell时,它成功连接到DEPLOYMENT_SERVER。 然后我运行(在cap-shell中)命令

 git ls-remote ssh://git@GIT_SERVER:7999/path/to/repo.git staging

我得到了正确答案:

 ** [out :: localhost:2222] adec1c91e5486a946be30845878cdd5b8420dcfe    refs/heads/staging

我不想在我的LOCAL_MACHINE(ssh_options[:forward_agent] = false)上使用密钥,我已经在DEPLOYMENT_SERVER上准备了部署用户,并且他/他已经(在登录后)只使用DEPLOYMENT_SERVER上的密钥访问GIT_SERVER。

我很困惑cap shell command有效但cap deploy没有。

BTW:我正在尝试在Vagrant虚拟机上测试登台部署(DEPLOYMENT_SERVER ssh:localhost:2222)。但是在真正的临时服务器上会出现同样的问题。

EDITED:

我发现deploy:update_code上的Capistrano 2.15.4正在从LOCAL_MACHINE进行git ls-remote __repo_url__,而不是来自DEPLOY_SERVER。

可以覆盖。

原件:

_cset(:real_revision) { source.local.query_revision(revision) { |cmd| with_env("LC_ALL", "C") { run_locally(cmd) } } }

在deploy.rb中覆盖为:

set(:real_revision) { source.query_revision(revision) { |cmd| with_env("LC_ALL", "C") { run(cmd) } } }

将在DEPLOY_SERVER上成功运行命令,但不知何故不能得到结果。代替:

 "7a8164e340e724b1c96c28ed925f6e41194daed7\trefs/heads/master\n004d1efd07b432cab6d7924df1ef7c3cd0c8bedb\trefs/remotes/origin/master\n"
你有

 nil

0 个答案:

没有答案