当服务器ssh密钥具有密码短语时,Capistrano部署失败

时间:2017-01-19 04:03:01

标签: ssh deployment capistrano digital-ocean ssh-keys

当我为远程服务器上的ssh密钥设置密码短语时,使用Capistrano进行部署失败。

但是当没有密码短语设置时它会起作用...

我希望能够在部署时输入密码,这样我仍然可以在服务器上使用密码。

错误:

01 mkdir -p /tmp
01 <user>@<ip> 0.183s
Uploading /tmp/git-ssh-<app>-<env>-<me>.sh 100.0%
02 chmod 700 /tmp/git-ssh-<app>-<env>-<me>.sh
02 <user>@<ip> 0.178s
git:check

01 git ls-remote --heads git@github.com:<me>/<my-repo>.git
01 Permission denied (publickey).
01 fatal: Could not read from remote repository.
01
01 Please make sure you have the correct access rights
01 and the repository exists.

cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as <user>@<ip>: git exit status: 128
git stdout: Nothing written
git stderr: Permission denied (publickey).
fatal: Could not read from remote repository.

deploy.rb

lock '3.7.1'
set :application, '<app>'
set :repo_url, 'git@github.com:<me>/<app>.git'
set :user, '<user>'
set :scm_user, '<me>'
set :deploy_to, '/home/<user>/<app>'
set :scm, :git
set :branch, 'master'
append :linked_files, 'config/database.yml', 'config/secrets.yml'
append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "vendor/bundle"

部署/ production.rb

server '<ip>', user: '<user>', roles: %w{app db web}

所以我希望Capistrano在部署时向我询问密码,以便我的服务器可以使用它来连接github。

这可能吗?

1 个答案:

答案 0 :(得分:2)

您可以使用SSH代理转发。因此,无需在服务器上输入密码。

这样您只需在本地ssh-add keyname_rsa预加载ssh密钥,然后将其自动转发到主机,然后根据需要从主机转发到Github服务器。

因此,您只需在本地输入一次密码:

enter image description here

其余部分在部署期间“自动”发生。这值得设置。

来自the docs

  

1.2.1 SSH代理转发

     

由于我们已经设置了SSH代理,我们可以使用代理转发   SSH的功能,使此密钥代理可用于进一步 hops 。在   简而言之,我们可以使用我们自己的ssh密钥来验证自己   服务器到Github。