Мои ssh ключи определенно настраиваются правильно, поскольку мне никогда не предлагают пароль при использовании ssh. Но capistrano все еще просит пароль при развертывании с cap deploy
. Это не просит пароль, когда я устанавливаю с cap deploy:setup
хотя, странно достаточно. Это сделало бы цикл развертывания настолько более гладким без подсказки пароля.
Специфические особенности: я развертываю приложение Sinatra на Dreamhost совместно использованная учетная запись (который использует Пассажира). Я следовал учебному руководству для того, чтобы сделать так долго назад, который работал отлично тогда. Что-то повредилось с тех пор. Я использую capistrano (2.5.9) и версию 1.6.1.1 мерзавца. Вот мой Capfile:
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
set :user, 'ehsanul'
set :domain, 'jellly.com'
default_run_options[:pty] = true
# the rest should be good
set :repository, "ehsanul@jellly.com:git/jellly.git"
set :deploy_to, "/home/ehsanul/jellly.com"
set :deploy_via, :remote_cache
set :scm, 'git'
set :branch, 'deploy'
set :git_shallow_clone, 1
set :scm_verbose, true
set :use_sudo, false
server domain, :app, :web
namespace :deploy do
task :migrate do
run "cd #{current_path}; /usr/bin/rake migrate environment=production"
end
task :restart do
run "touch #{current_path}/tmp/restart.txt"
end
end
after "deploy", "deploy:migrate"
И вот вывод того, что происходит когда я cap deploy
, до подсказки пароля:
$ cap deploy
* executing `deploy'
* executing `deploy:update'
** transaction: start
* executing `deploy:update_code'
updating the cached checkout on all servers
executing locally: "git ls-remote ehsanul@jellly.com:git/jellly.git deploy"
/usr/local/bin/git
* executing "if [ -d /home/ehsanul/jellly.com/shared/cached-copy ]; then cd /home/ehsanul/jellly.com/shared/cached-copy && git fetch origin && git reset --hard ea744c77b0b939d5355ba2dc50ef1ec85f918d66 && git clean -d -x -f; else git clone --depth 1 ehsanul@jellly.com:git/jellly.git /home/ehsanul/jellly.com/shared/cached-copy && cd /home/ehsanul/jellly.com/shared/cached-copy && git checkout -b deploy ea744c77b0b939d5355ba2dc50ef1ec85f918d66; fi"
servers: ["jellly.com"]
[jellly.com] executing command
** [jellly.com :: out] ehsanul@jellly.com's password:
Password:
** [jellly.com :: out]
** [jellly.com :: out] remote: Counting objects: 7, done.
remote: Compressing objects: 100% (4/4), done.
Что могло быть повреждено?
В логах видно, что после входа по SSH на jellly.com запрашивается пароль, так что похоже, что пароль запрашивает само обновление git.
Я думаю, это потому, что в настройках репозитория указан ваш пользователь git, хотя в этом случае вы можете получить доступ к нему анонимно.
Вам следует создать анонимную учетную запись git и изменить строку репозитория следующим образом:
set :repository, "git@jellly.com:git/jellly.git"
В качестве альтернативы, вы можете поместить ваш SSH ключ на ваш рабочий сервер, но это не кажется полезным. Вы также можете настроить SSH на перенаправление запросов аутентификации обратно через начальное SSH-соединение. Однако анонимный контроль исходных текстов только для чтения для развертывания, вероятно, проще.