Назад | Перейти на главную страницу

Как установить ssh-соединение между серверами с использованием аутентификации с открытым ключом

Я настраиваю сервер непрерывной интеграции (CI) и тестовый веб-сервер. Я бы хотел, чтобы CI-сервер имел доступ к веб-серверу с аутентификацией с открытым ключом. На веб-сервере я создал пользователя и сгенерировал ключи

sudo useradd -d /var/www/user -m user
sudo passwd user
sudo su user
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/var/www/user/.ssh/id_rsa):
Created directory '/var/www/user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/www/user/.ssh/id_rsa.
Your public key has been saved in /var/www/user/.ssh/id_rsa.pub.

Однако с другой стороны, CI-сервер копирует ключ на хост, но по-прежнему запрашивает пароль.

ssh-copy-id -i ~/.ssh/id_rsa.pub user@webserver-address
user@webserver-address's password:
Now try logging into the machine, with "ssh 'user@webserver-address'", and check in:

.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Я проверил веб-сервер, и открытый ключ CI-сервера был скопирован на веб-сервер authorized_keys, но когда я подключаюсь, он запрашивает пароль.

  ssh 'user@webserver-address'
  user@webserver-address's password:

Если я попытаюсь использовать пользователя root, а не моего созданного пользователя (оба пользователя имеют скопированные открытые ключи). Он соединяется с открытым ключом

  ssh 'root@webserver-address'
  Welcome to Ubuntu 11.04 (GNU/Linux 2.6.18-274.7.1.el5.028stab095.1 x86_64)

   * Documentation:  https://help.ubuntu.com/
  Last login: Wed Apr 11 10:21:13 2012 from *******
  root@webserver-address:~#

В вашем вопросе говорится, что вы хотите войти на веб-сервер с сервера CI. Но затем вы говорите, что создали ключи на веб-сервере. Не знаю, недоразумение это или опечатка.

Вот краткий обзор того, что вам нужно сделать, чтобы разрешить вход на веб-сервер с сервера CI с ключами:

  1. Создайте пару открытого / закрытого ключей на сервере CI
  2. Скопируйте публичную часть ключа (id_rsa.pub) на веб-сервер в ~/.ssh/authroized_keys файл для каждого пользователя, которого вы хотите войти как (root, user и т.д.). Я обычно просто использую scp чтобы скопировать файл на сервер. Если у вас есть несколько ключей, которые будут использоваться для каждого пользователя, добавьте их в authorized_keys. В противном случае, если это единственный ключ для этого пользователя, вы можете просто переименовать id_rsa.pub к authorized_keys.
  3. Убедитесь, что разрешения на .ssh папка 644 с chmod 644 .ssh а авторизованный ключевой файл имеет права доступа 700 с chmod 700 .ssh/authorized_keys.
  4. Попытайтесь войти на веб-сервер с сервера CI с именем пользователя, которому вы скопировали открытый ключ на веб-сервере, например. ssh user@webserver

Он не должен запрашивать пароль (предполагается, что вы следовали совету @ khaled относительно файла конфигурации sshd, но по умолчанию обычно разрешается аутентификация ключа перед паролем).