Капистрано и несколько ключей SSH

Мне нужно, чтобы 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 использует BOTH ключи? Кажется, что используется только одно имя id_rsa.

изменить:

Здесь вывод из Capistrano с сообщением об ошибке:

$ cap yii deploy
  * executing `yii'
Yii
  * executing `deploy'
  * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
    executing locally: "git ls-remote [email protected]:/projectyii.git HEAD"
  * executing "git clone -q [email protected]:/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 [email protected]:/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

изменить:

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

Ответы

Ответ 1

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

Если он просто выполняет обычные вызовы 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

Ответ 2

У меня есть эта строка в 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)

Ответ 3

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

Ответ 4

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

['~/.ssh/onekey.pem','~/.ssh/id_rsa'].each do |name|
  if File.exists?(File.expand_path(name))
    ssh_options[:keys] ||= name
  end
end