Capistrano и несколько ключей SSH - PullRequest
       19

Capistrano и несколько ключей SSH

17 голосов
/ 23 августа 2011

Мне нужно, чтобы Capistrano использовал 2 разных ключа SSH.Один предназначен для репозитория git, другой - для развертывания сервера.

Какой бы ключ я ни переименовал в id_rsa в моей папке .ssh, он работает.Другой нет.Если я переименую ключ git в id_rsa, Capistrano может подключиться к хранилищу git, но затем не сможет выполнить аутентификацию на сервере для развертывания.Если я назову это как-то иначе, он не сможет подключиться к git-репо.Я знаю, что другой ключ работает, потому что я могу сделать ssh -i ~ / .ssh / otherKey.pem, и он успешно подключится к серверу.

Это то, что у меня есть в моем файле deploy.rb Capistrano.

ssh_options[:keys] = [
        File.join(ENV["HOME"], ".ssh", "id_rsa"),
        File.join(ENV["HOME"], ".ssh", "deploy")
    ]

ssh_options[:forward_agent] = true 

Как я могу сказать Capistrano использовать ОБА ключи?Кажется, он использует только тот, который называется id_rsa.

edit:

Вот вывод Capistrano с сообщением об ошибке:

$ cap yii deploy
  * executing `yii'
Yii
  * executing `deploy'
  * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
    executing locally: "git ls-remote git@project.beanstalkapp.com:/projectyii.git HEAD"
  * executing "git clone -q git@project.beanstalkapp.com:/projectyii.git /var/www/projectyii-trunk/releases/20110824174629 && cd /var/www/projectyii-trunk/releases/20110824174629 && git checkout -q -b deploy 5e14521285ca04a605353e97bdf31c3a2889dbfb && (echo 5e14521285ca04a605353e97bdf31c3a2889dbfb > /var/www/projectyii-trunk/releases/20110824174629/REVISION)"
    servers: ["yii.project.com"]
    [yii.project.com] executing command
 ** [yii.project.com :: err] Error reading response length from authentication socket.
 ** [yii.project.com :: err] Permission denied (publickey,keyboard-interactive).
 ** [yii.project.com :: err] fatal: The remote end hung up unexpectedly
    command finished
*** [deploy:update_code] rolling back
  * executing "rm -rf /var/www/projectyii-trunk/releases/20110824174629; true"
    servers: ["yii.project.com"]
    [yii.project.com] executing command
    command finished
failed: "sh -c \"git clone -q git@project.beanstalkapp.com:/projectyii.git /var/www/projectyii-trunk/releases/20110824174629 && cd /var/www/projectyii-trunk/releases/20110824174629 && git checkout -q -b deploy 5e14521285ca04a605353e97bdf31c3a2889dbfb && (echo 5e14521285ca04a605353e97bdf31c3a2889dbfb > /var/www/projectyii-trunk/releases/20110824174629/REVISION)\"" on yii.project.com

edit:

Другое дело: он полностью работает с моей локальной машины, только не на сервере развертывания - с точно такими же конфигурационными файлами!Кажется, что Capistrano использует правильные ключи на моей локальной машине, но не на машине развертывания.

Ответы [ 4 ]

22 голосов
/ 23 августа 2011

Отказ от ответственности: я ничего не знаю о Capistrano.

Если он просто делает обычные ssh звонки (или звонки git, чтобы сделать это), вы можете настроить правильный ключ для использования в вашем~/.ssh/config для каждого хоста (или псевдонима хоста).

Например, у меня есть следующие строки в моем файле ~/.ssh/config:

# Git bei Github
Host github.com
User git
IdentityFile ~/.ssh/svn_id_rsa

#  Andere Mathe-Hosts
Host *.math.hu-berlin.de
User ebermann
IdentityFile ~/.ssh/id_rsa
ControlMaster auto
10 голосов
/ 21 января 2012

У меня есть эта строка в deploy.rb:

ssh_options[:keys] = %w(/Users/victor.pudeyev/ec2/MBP-2.pem)

Это говорит о том, что ключевые имена файлов разделены пробелами, например

ssh_options[:keys] = %w(/Users/victor.pudeyev/ec2/MBP-1.pem /Users/victor.pudeyev/ec2/MBP-2.pem)
0 голосов
/ 19 ноября 2014

Немного опоздал на вечеринку, но один из вариантов - использовать немного рубинового клея, чтобы определить, какой файл использовать:

['~/.ssh/onekey.pem','~/.ssh/id_rsa'].each do |name|
  if File.exists?(File.expand_path(name))
    ssh_options[:keys] ||= name
  end
end
0 голосов
/ 29 августа 2013

У меня была эта проблема, и в capfile был установлен ssh forwarding.Удаление этого позволило целевому блоку использовать свои собственные ключи

...