Capistrano git:包装器一直要求ssh密码

时间:2016-07-07 15:40:17

标签: git drupal web-deployment ssh-keys capistrano3

我正在尝试使用Capistrano 3.3.5(以及net-ssh 3.2.0)部署Drupal应用程序。我的部署工作站是运行git-bash的Windows。我也启动了ssh-agent,并为我的私钥运行了ssh-add。

然后我跑了:

> cap development deploy 

它问我私钥的密码。

Enter passphrase for C:/Users/jgodse/.ssh/id_rsa: my_password

当我输入" my_password"作为我的SSH密钥密码,它挂了。我做了一个CTRL-C,然后说:

bash: my_password: command not found

然后我尝试了:

> cap development --dry-run

几次回击后,我得到了一张干燥的日志。前几行看起来像这样:

$ cap development deploy --dry-run
There was a problem tracking statistics, please report to     https://github.com/capistrano/stats

 INFO [4b085395] Running /usr/bin/env mkdir -p /tmp/myapp/ as ubuntu@www.myapp.com
 DEBUG [4b085395] Command: /usr/bin/env mkdir -p /tmp/myapp/
 INFO [b5f607a2] Running /usr/bin/env #<StringIO:0x3b9e4d0> /tmp/myapp/git-ssh.sh as ubuntu@www.myapp.com
 DEBUG [b5f607a2] Command: /usr/bin/env #<StringIO:0x3b9e4d0> /tmp/myapp/git-ssh.sh
 INFO [c0895cc9] Running /usr/bin/env chmod +x /tmp/myapp/git-ssh.sh as ubuntu@www.myapp.com

然后我调整了Capfile以添加语句:

set :ssh_options, {:forward_agent => true}

没有变化。

然后我升级到capistrano 3.5.0,并且未安装capistrano-stats,并将版本锁定为3.5.0。

> cap development deploy --dry-run

我得到了:

00:00 git:wrapper
      01 mkdir -p /tmp/myapp/
      02 #<StringIO:0x28c7238> /tmp/myapp/git-ssh.sh
      03 chmod +rx /tmp/myapp/git-ssh.sh

这告诉我git:wrapper任务可能很麻烦。然后我跑了:

> cap development git:wrapper

我得到了:

00:00 git:wrapper
      01 mkdir -p /tmp/myapp/
Enter passphrase for C:/Users/me/.ssh/id_rsa:

当我输入密码时,我得到了与之前相同的结果。然后我做了:

> cap development git:wrapper --dry-run

我得到了:

00:00 git:wrapper
      01 mkdir -p /tmp/myapp/
      02 #<StringIO:0x28e2448> /tmp/myapp/git-ssh.sh
      03 chmod +rx /tmp/myapp/git-ssh.sh

此时它看起来像git:wrapper任务不起作用,可能是因为第2步中有这个StringIO:它看起来像一个Ruby对象id而不是实际的Bash命令。或者它可能是别的东西。

有没有办法解决这个问题,以便我的部署不会错误地要求我输入密码?

1 个答案:

答案 0 :(得分:1)

您可能需要设置SSH代理,以便在部署时不会请求密钥的密码。

Capistrano文档详细说明了这一点:http://capistranorb.com/documentation/getting-started/authentication-and-authorisation/

简短版本可能类似于:

执行命令

eval "$(ssh-agent -s)"
ssh-add
# It'll prompt you for your password here.
cap dev deploy # Or whatever you run to execute Capistrano.

此时,你应该可以在这个shell中运行Capistrano,而不会被提示输入密码。

如果这很有用,您可能需要查找如何设置shell以在终端之间共享ssh-agent会话。