Capistrano запрашивает пароль при развертывании, несмотря на ключи SSH - PullRequest
50 голосов
/ 17 июля 2010

Мои ssh-ключи определенно настроены правильно, поскольку у меня никогда не запрашивается пароль при использовании ssh.Но capistrano по-прежнему запрашивает пароль при развертывании с cap deploy.Он не запрашивает пароль при установке с cap deploy:setup, как ни странно.Это сделает цикл развертывания намного более плавным без запроса пароля.

Особенности: Я развертываю приложение Sinatra в общей учетной записи Dreamhost (которая использует Passenger).Я следовал учебному пособию для того, чтобы делать это так долго назад, который работал отлично тогда.С тех пор что-то сломалось.Я использую capistrano (2.5.9) и git версии 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.

Что может быть сломано?

Ответы [ 7 ]

65 голосов
/ 22 января 2014

Выполнение ssh-add ~/.ssh/id_rsa на моей локальной машине решило проблему для меня. Казалось, что инструмент командной строки ssh не обнаружил мою личность при вызове с Capistrano.

54 голосов
/ 05 сентября 2010

Запрос пароля, потому что сервер, на который вы развертываете, подключается к git-серверу и нуждается в аутентификации. Поскольку на вашем локальном компьютере (где вы развертываете из ) уже есть действительный ssh-ключ, используйте его, включив пересылку в вашем Capfile:

set :ssh_options, {:forward_agent => true}

Это перенаправляет аутентификацию с вашего локального компьютера, когда сервер развертывания пытается подключиться к вашему git-серверу.

Это гораздо предпочтительнее, чем помещать ваш закрытый ключ на сервер развертывания!

Другой способ обойти запрос пароля, когда сервер снова работает с ssh, - это попросить capistrano не делать этого. Благодаря разделу «readme» для capistrano-site5 github Даниэля Куимпера мы отмечаем следующее:

set :deploy_via, :copy

Очевидно, это работает в случае, когда приложение и репозиторий git размещаются на одном хосте. Но я думаю, что некоторые из нас это делают:)

17 голосов
/ 20 февраля 2011

У меня была такая же проблема.

Эта строка не работала:

set :ssh_options, {:forward_agent => true}

Затем я выполнил упомянутое на Dreamhost wiki

[local ~]$ eval `ssh-agent`
[local ~]$ ssh-add ~/.ssh/yourpublickey  # omit path if using default keyname

ИТеперь я могу развернуть без пароля.

3 голосов
/ 17 июля 2010

В журналах показано, что после входа по SSH на jellly.com запрашивается пароль, поэтому похоже, что само обновление git запрашивает пароль.

Я думаю, это потому, что в настройках вашего репозитория указан ваш пользователь git, хотя в этом случае вы можете обращаться к нему анонимно.

Вы должны создать анонимную учетную запись git и изменить свою линию репо следующим образом:

set :repository,  "git@jellly.com:git/jellly.git"

В качестве альтернативы, вы можете поместить свой ключ SSH на свой производственный сервер, но это не звучит полезно. Вы также можете настроить SSH для пересылки запросов аутентификации обратно через исходное соединение SSH. Тем не менее, анонимный исходный контроль только для чтения для развертывания, вероятно, проще.

1 голос
/ 08 сентября 2016

Я копирую и вставляю свой локальный ключ machie id_rsa.pub в файл авторизованного ключа удаленного сервера, и он работает

0 голосов
/ 17 мая 2017

копирование открытого ключа вручную в authorized_keys не работало в моем случае, но работа через сервис работала, когда я обнаружил, что сервис просто добавил еще один ключ в конце

ssh-copy-id ~/.ssh/id_rsa.pub user@remote
0 голосов
/ 19 февраля 2013

Если вы используете рабочую станцию ​​Windows (портативную), которую вы иногда подключаете непосредственно к внутренней корпоративной сети, а иногда подключаетесь через VPN, вы можете столкнуться с непоследовательным поведением при запуске удаленных задач с ограниченным доступом, запрашивающих у вас пароль.

В моей ситуации у нашей компании есть сценарии входа в систему, которые выполняются, когда вы вошли в систему, когда вы уже подключены к локальной сети компании, в которой для вашего каталога HOME задан общий сетевой ресурс.Если вы входите из кэшированных учетных данных, а затем через VPN, ваш домашний каталог не устанавливается сценарием входа.Каталог .ssh, в котором хранится ваш закрытый ключ, может находиться только в одном из этих мест.

Простое решение в этой ситуации - просто скопировать каталог .ssh из ДОМА, в котором он находится, в тот, который не 'т.

...