Развертывание на нескольких серверах: запрос пароля ssh для каждого сервера
Я настраиваю Capifony (Capistrano для Symfony), но у меня проблема с паролем ssh при тестировании развертывания на нескольких серверах.
Вот несколько версий:
daniel@fiji:~$ ruby --version
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]
daniel@fiji:~$ cap --version
Capistrano v2.9.0
daniel@fiji:~$ uname -a
Linux fiji 3.0.0-13-generic-pae #22-Ubuntu SMP Wed Nov 2 15:17:35 UTC 2011 i686 i686 i386 GNU/Linux
И некоторые конфигурации из deploy.rb:
set :domain, "mydomain"
...
set :user, "sshuser"
set :password, "sshpassword"
...
role :web, domain
role :app, domain
...
Развертывание на одном сервере прекрасно работает, не нужно вводить пароли. Все хорошо. Но если я попытаюсь добавить больше серверов в конфигурацию (мне нужно будет развернуть на 6–9 компьютерах) с такой конфигурацией:
...
set :user, "sshuser"
set :password, "sshpassword"
role :web, "ipaddr1", "ipaddr2"
role :app, "ipaddr1", "ipaddr2"
...
Capistrano начинает спрашивать у меня пароль ssh для каждого сервера в списке, даже если он установлен как раньше... что не так с этой конфигурацией? Ввод пароля позволяет продолжить процесс и все работает, но я бы не хотел вводить пароль каждый раз.
Спасибо Даниэль
2 ответа
Я не понимаю, почему Капистрано продолжает спрашивать ваш пароль. Однако одним из способов решения этой проблемы является использование аутентификации с открытым ключом, что также предлагается в википедии Capistrano. (см. это руководство для примера того, как это настроить)
Короче:
- Вы генерируете ключ, используя
ssh-keygen -t rsa -C "youremail"
- Вы копируете открытый ключ на удаленный хост
scp -p .ssh/id_rsa.pub remoteuser@remotehost:
- Вы добавляете открытый ключ в файл авторизованных ключей на сервере:
cat id_rsa.pub >> ~/.ssh/authorized_keys
, (Вам может понадобиться создать.ssh dir)
После этого вам нужно будет ввести пароль только один раз, и вам не нужно будет жестко кодировать его в файле deploy.rb.
По словам более опытных пользователей, я могу сказать, что использование пароля для аутентификации ssh не является хорошей практикой. Намного лучше использовать ssh-ключи и полагаться на них. Просто нужно убрать строку
set :password, "sshpassword"
и, очевидно, установить открытые ключи на каждом сервере, где развернуть.