SSH — авторизация по ключам

Автор: | 07/26/2013
 

ssh_logo

Метод авторизации с использованием ключей позволяет выполнять вход на удалённые системы без необходимости ввода пароля. Кроме того, такую схему можно использовать в утилитах 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:
******************************* user@akira.domain.kiev.ua
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 user@newakira.domain.org.ua:/home/user/.ssh

Один раз авторизуемся с удалённого сервера на локальную машину:

$ ssh user@newakira.domain.org.ua

Проверяем наличие приватного ключа на локальной машине:

$ 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.