在 vagrant 环境中摆脱 mkdir 命令的 capistrano 密码确认

Getting rid of capistrano password confirmation for mkdir command in vagrant environment

我正在使用两个相同的 vagrant boxes,它们用于测试 capistrano 部署过程。我可以成功地将应用程序从 dev 框部署到 prod 框。但是,我无法摆脱密码确认。

据我从输出中看到的,确认发生在部署过程尝试 运行 mkdir -p /capistrano/tmp 时,如下所示。

$ bundle exec cap production deploy --trace
** Invoke production (first_time)
** Execute production
** Invoke load:defaults (first_time)
** Execute load:defaults
** Invoke deploy (first_time)
** Execute deploy
** Invoke deploy:starting (first_time)
** Execute deploy:starting
** Invoke deploy:check (first_time)
** Invoke git:check (first_time)
** Invoke git:wrapper (first_time)
** Execute git:wrapper
00:00 git:wrapper
      01 mkdir -p /capistrano/tmp
vagrant@192.168.99.50's password:

prod 服务器上的当前权限如下(我已按照 scp: /tmp/git-ssh.sh: Permission denied 所述手动授予 777):

vagrant@prod:~$ ls -l /
drwxrwxrwx  3 vagrant vagrant  4096 Apr  7 16:30 capistrano

vagrant@prod:~$ ls -l /capistrano/
drwxrwxrwx 2 vagrant vagrant 4096 Apr  7 16:33 tmp

然后当我输入密码时,它会在 /capistrano/tmp/ 路径下创建 git-ssh-football-production-vagrant.sh

vagrant@prod:~$ ls -l /capistrano/tmp/
-rwx------ 1 vagrant vagrant 93 Apr  7 16:33 git-ssh-football-production-vagrant.sh

我已经 removed/created/used 不同的文件夹,对 vagrant 用户具有 777 权限,我也尝试了 www-data,但无法摆脱密码确认。

deploy.rb

...
set :tmp_dir, "/capistrano/tmp"
set :user, "vagrant"
...

production.rb

role :app, %w{vagrant@192.168.99.50}
server '192.168.99.50', user: 'vagrant', roles: %w{app}

找到解决方案。我所要做的就是使用下面的命令将 dev 服务器的 public 密钥添加到 prod 服务器的 authorized_keys

$ cat ~/.ssh/id_rsa.pub | ssh vagrant@192.168.99.40 'cat >> /home/vagrant/.ssh/authorized_keys'