Капистрано и несколько ключей 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