SSH авторизация по ключу в Debian

SSH авторизация по ключу в Debian

Ранее мы рассматривали как обезопасить доступ к вашему оборудованию через OpenSSH и приводили необходимые меры. Как показывает практика этого недостаточно для того чтобы доступ к вашему оборудованию был надежен. Поэтому для увеличения безопасности от несанкционированного доступа мы добавим авторизацию по ключу при подключении по SSH. Пример использования как всегда на ОС Debian 9.

Содержание

Предисловие

Настроив SSH авторизацию по ключу, вы не только улучшите безопасность сервера, но и еще немного упростите себе жизнь. Вместо использования паролей, которые легко перехватить кейлоггером, в процессе SSH авторизации на сервере мы будем использовать RSA ключи. Для обеспечения хорошего уровня безопасности будет достаточно использовать длину ключа равной 2048 бит. Чтобы усложнить кражу, желательно хранить секретный ключ на зашифрованном разделе вашей системы.

1. Настройка OpenSSH

Все настройки сервера OpenSSH хранятся в файле /etc/ssh/sshd_config. Откроем файл для редактирования и внесем настройки:
vim /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
PasswordAuthentication no

AuthorizedKeysFile      %h/.ssh/authorized_keys – По умолчанию эта настройка указывает на то, что открытые ключи каждого пользователя следует искать в его домашнем каталоге, в файле authorized_keys, лежащем в подкаталоге .ssh.

2. Генерация и размещение ключей

Если вы решили настроить на вашем сервере SSH авторизацию по ключу, первое, что необходимо сделать — это сгенерировать секретный и публичный RSA-ключи. Под Linux для генерации ключей я буду использовать ssh-keygen, для Windows есть утилита PuTTYgen.

2.1 Генерация ключей в Linux

Выполните указанную ниже команду для создания ключа длиной 2048 бит и с комментарием “Key for Neustroev Maxim“. Права root не требуются. Я советую добавить комментарий для ключа – в этом случае при подключении с его помощью в логах сервера будет отображаться этот комментарий. Можете ввести сюда свои имя и фамилию.
Авторизуемся под пользователем для которого создаем ключи:
su ЛОГИН
ЛОГИН – логин учетной записи, для которой создаем ключи.
ssh-keygen -t rsa -b 2048 -C "Key for Neustroev Maxim"
Программа предложит указать каталог, в который будут сохранены файлы ключей и попросит ввести секретную фразу. Нажимаем Enter чтобы использовать параметры по умолчанию. Если вы хотите добавить секретную фразу, вводим её два раза.
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ЛОГИН/.ssh/id_rsa):
Created directory '/home/ЛОГИН/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ЛОГИН/.ssh/id_rsa.
Your public key has been saved in /home/ЛОГИН/.ssh/id_rsa.pub.
The key fingerprint is:
72:56:ab:fd:e2:99:cb:4b:93:ef:63:26:73:f2:d3:19 ЛОГИН@pbx
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| . |
| . . |
| . D . |
| + o . T |
| . = . o |
| o=** o |
| .S&=o |
+-----------------+
Enter passphrase – устанавливает пароль на клиентский ключ. Восстановить его НЕВОЗМОЖНО
После генерации ключа, появится 2 файла:
  • Your identification has been saved in /home/user/.ssh/id_rsa.
  • Your public key has been saved in /home/user/.ssh/id_rsa.pub.

id_rsa – приватный ключ пользователя;
id_rsa.pub – публичный ключ сервера.
Записываем созданный ключ:

cat id_rsa.pub >> ~/.ssh/authorized_keys

Копируем себе файл id_rsa, и удаляем его на сервере. Так же удаляем и id_rsa.pub.
Далее переходим в раздел Настройка SSH авторизации по ключу в PuTTY для создания файла .ppk.

2.2 Генерация ключей в PuTTYgen

Думаю, что с генерацией ключей в PuTTYgen проблем быть не должно. Запускаете программу, нажимаете Generate и потом начинаете беспорядочно водить курсор по экрану. Затем копируете публичный ключ из поля ‘Public key for pasting into OpenSSH authorized_keys file’ и жмете Save private key, чтобы сохранить публичный и приватный ключ. После генерации, публичный ключ копируется в файл ~/.ssh/authorized_keys на сервере, а секретный ключ остается храниться на локальном компьютере.
После проделанного в домашней директории пользователя появятся два файла id_rsa — секретный ключ, id_rsa.pub — публичный ключ. Скопируйте в надежное место файл секретного ключа, а публичный ключ перенесите на сервер.
Заносим сгенерированный нами открытый ключ в авторизованные ключи сервера. Для этого скопируйте содержимое id_rsa.pub в конец файла authorized_keys:
cat id_rsa.pub >> ~/.ssh/authorized_keys

Установим права:

chmod 700 ~/.ssh/ &&
chmod 600 ~/.ssh/authorized_keys &&
chmod 600 ~/.ssh/id_rsa

Настройка SSH авторизации по ключу в Linux

Для SSH авторизации по ключу в Linux, создайте файл ~/.ssh/config и скопируйте в него строки ниже. Затем по аналогии укажите адрес сервера и расположение файла секретного ключа:
Host server.net
IdentityFile ~/.ssh/keys/id_rsa

Установите права на файл:

chmod 600 ~/.ssh/config
Для того чтобы зайти на сервер, используя SSH авторизацию по ключу, выполните команду:
ssh -i ~/.ssh/id_rsa user@server.net

Настройка SSH авторизации по ключу в PuTTY

Если ключ id_rsa сгенерирован в Linux, нужно перевести его в формат .ppk с помощью утилиты PuTTYgen. Открываете утилиту PuTTYgen, выбираете меню Conversion -> Import key. Выбираете свой файл id_rsa и нажимаете Save private key:
SSH авторизация по ключу в Debian
Для авторизации по ключу в PuTTY укажите расположение ключа в меню Connetction -> SSH -> Auth -> Private key file for authentication.
SSH авторизация по ключу в Debian
Сохраните подключение.
Теперь при подключении вам нужно будет вводить не пароль пользователя системы, а пароль от вашего ключа. Удобство заключается в том, что можно создать один публичный ключ и разместить его на десятке серверов. Теперь вместо того, чтобы помнить 10 разных паролей, достаточно помнить всего один и хранить его и секретный ключ в надёжном месте, исключающем доступ посторонних лиц.

Использование ключей для авторизации не отменяет ввода пароля пользователя при вызове команды sudo!