Метод авторизации с использованием ключей позволяет выполнять вход на удалённые системы без необходимости ввода пароля. Кроме того, такую схему можно использовать в утилитах scp, при подключении по SFTP и в своих собственных скриптах.
Для авторизации таким методом используются два ключа – “открытый” (public_key), который находится в домашнем каталоге пользователя, под которым будет выполняться вход на сервере, на который будет осуществляться подключение, и “закрытый” (“privat_key“) – тот, который будет хранится в домашнем каталоге пользователя на машине, с которой будет выполняться вход.
UPD Данный пост устарел. Версия получше тут>>>.
Далее: удалённый сервер – сервер, на котором мы настраиваем доступ по ключам (в примерах это будет akira.domain.org.ua).
Локальная машина – компьютер, с которого будем подключаться к удалённому серверу (в примерах это будет newakira.domain.org.ua).
Пример настройки выполняется на:
$ uname -v
FreeBSD 9.0-RELEASE-p3
Начнём с генерации этих пар. Выполняем на удалённом сервере при помощи утилиты ssh_keygen, запущенной от имени пользователя (!), под которым будем подключаться:
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
******************************* [email protected]
The key’s randomart image is:
…
На вопросы отвечаем просто нажатием Enter – менять не будем:
Enter file in which to save the key (/home/user/.ssh/id_rsa) // оставляем предложенный по-умолчанию путь к каталогу, в котором будет храниться наш приватный ключ;
Enter passphrase (empty for no passphrase) // оставляем поле пустым, закрывать ключ паролем не станем;
В данном случае используется алгоритм RSA. Можно выполнить генерацию ключа, который будет использовать алгоритм DSA – однако он не может быть использован для шифрования передаваемой информации.
Your identification has been saved in /home/user/.ssh/id_rsa // наш приватный ключ;
Your public key has been saved in /home/user/.ssh/id_rsa.pub // наш публичный ключ.
Можно просмотреть ключи, например:
$ cat /home/user/.ssh/id_rsa
—–BEGIN RSA PRIVATE KEY—–
…
—–END RSA PRIVATE KEY—–
На удалённом сервере настроим sshd на авторизацию с использованием ключей:
$ sudo vim /etc/ssh/sshd_config
Находим или добавляем строки:
# Разрешаем использование RSA-ключей
RSAAuthentication yes
# Разрешаем авторизацию по ключам
PubkeyAuthentication yes
# Указываем файл, в котором будут наши открытые ключи, по которым разрешена авторизация
AuthorizedKeysFile .ssh/authorized_keys
Перезапускаем sshd:
# service sshd restart
Stopping sshd.
Waiting for PIDS: 1470.
Starting sshd.
Занесём наш public_key в файл ~/.ssh/authorized_keys:
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Обязательно меняем права:
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh
Проверяем:
$ ls -la ~/.ssh/ | grep key
-rw——- 1 user user 411 Jul 26 13:59 authorized_keys
$ ls -la ~ | grep ssh
drwx—— 2 user user 512 Jul 26 12:37 .ssh
Теперь – необходимо настроить систему на локальной машине, с которой будет выполняться вход.
Копируем наш приватный ключ с удалённого сервера на локальную машину.
На удалённом сервере выполняем:
$ scp ~/.ssh/id_rsa [email protected]:/home/user/.ssh
Один раз авторизуемся с удалённого сервера на локальную машину:
$ ssh [email protected]
Проверяем наличие приватного ключа на локальной машине:
$ ls -la ~/.ssh/ | grep id
-rw——- 1 user user 1679 Jul 26 10:27 id_rsa
На удалённом сервере удаляем файлы приватного и открытого ключей:
$ rm id_rsa && rm id_rsa.pub
И с локальной машины пробуем подключиться к удалённому серверу:
$ ssh -p 2222 domain.org.ua
Last login: Fri Jul 26 13:34:53 2013 from 178.***.***.114
FreeBSD 9.0-RELEASE-p3 (GENERIC) #0: Tue Jun 12 01:47:53 UTC 2012
Welcome to FreeBSD!
…
На этом настройка завершена.
При использовании Putty под Windows – потребуется утилита puttygen.