Настроем PuTTY (ОС Windows) для доступа на удаленный сервер по протоколу SSH с авторизацией не по логину и паролю, а с помощью SSH key. Аналогичную настройку сделаем и в ОС Linux (Debian).
Авторизация по логину/паролю небезопасна
В статье «VPN 2023 год. Создаем личный VPN за 292 руб. в месяц» описывается приобретение виртуального сервера, а для доступа на виртуальный сервер используется протокол SSH с авторизацией по логину и паролю. Логин — root. SSH порт — 22 (стандартный). Порт открыт всем. Оставлять так сервер нельзя! В сети Интернет огромное количество ботов (автоматических программ), сканирующих открытые порты серверов и подбирающих логин/пароль для несанкционированного доступа на сервер.
План действий для безопасности сервера
Для защиты своего сервера мы:
- пользователю root вообще запретим авторизацию по SSH;
- создадим обычного пользователя и настроим для этого пользователя авторизацию с помощью SSH key.
А если нужен root доступ на сервер? Пожалуйста! Авторизуйтесь под обычным пользователем с помощью SSH key, а затем переключайте пользователя в режим суперпользователя (root) с помощью команды:
su -
Генерация SSH key в Windows
Для генерации SSH ключа в ОС Windows мы будем использовать программу PuTTY Key Generator (puttygen.exe), которая устанавливается вместе с программой PuTTY (putty.exe). Скачать можно по ссылке https://putty.org.ru/download.html.

Тип генерируемого ключа выбираем RSA (см. рисунок выше), а количество бит в ключе — 2048 и нажимаем кнопку Generate. Двигаем хаотично компьютерной мышью для генерации ключа.
Сгенерированный SSH ключ можно дополнительно защитить парольной фразой. Для этого в поле Key passphrase вводим парольную фразу, а в поле Confirm passphrase повторяем ввод парольной фразы:

Нажимаем кнопку Save public key (см. рисунок выше), чтобы сохранить публичный ключ с расширением .pub:

Нажимаем кнопку Save private key, чтобы сохранить приватный ключ с расширением .ppk:

Приватный ключ (.ppk) хранится на компьютере, с которого будет осуществляться доступ на сервер. А публичный ключ (.pub) должен быть импортирован на сервер.
Генерация SSH key в Linux
Для генерации SSH key в ОС Linux вводим команду:
ssh-keygen
Придумываем имя SSH ключу (например, VSD_bg). При желании можно задать парольную фразу (passphrase) для защиты SSH key:

В результате выполнения команды ssh-keygen
получаем в текущей директории приватный ключ (VSD_bg) и публичный ключ (VSD_bg.pub), который будем импортировать на сервер.
Создание пользователя на сервере
На сервере создаем пользователя с именем user, c домашней директорией /home/user и командной оболочкой /bin/bash:
useradd -s /bin/bash -d /home/user -m user
Задаем пароль для пользователя user:
passwd user
Для удаления пользователя user вместе с домашней директорией используется команда:
userdel -r user
Импорт публичного ключа (.pub)
Публичный ключ (.pub) нужно скопировать с локального компьютера на сервер. Это можно сделать с помощью SCP-клиента.
Если локальный компьютер под ОС Linux, то копируем из текущей директории публичный ключ (VSD_bg.pub) на сервер (с IP 123.45.67.89) в домашнюю директорию /home/user только что созданного пользователя user:
scp VSD_bg.pub user@123.45.67.89:/home/user
Если локальный компьютер под ОС Windows, то см. «Доступ к серверу по протоколу SCP в Windows/Linux«.
После того, как публичный ключ (.pub) скопирован на сервер, его нужно импортировать в специальный файл SSH ключей того пользователя, от имени которого мы будем в последствии подключаться к серверу.
Для этого заходим на сервер под пользователем user, в домашней директории (/home/user/) создаем директорию .ssh:
mkdir .ssh
Устанавливаем права доступа к директории .ssh:
chmod 700 .ssh/
В директории .ssh создаем пустой файл SSH ключей с именем authorized_keys:
touch .ssh/authorized_keys
Устанавливаем права доступа к файлу authorized_keys:
chmod 600 .ssh/authorized_keys
Публичный ключ (/home/user/VDS_bg.pub), сгенерированный в ОС Windows, импортируем в специальный файл SSH ключей authorized_keys с помощью команды:
ssh-keygen -i -f /home/user/VDS_bg.pub >> /home/user/.ssh/authorized_keys
Публичный ключ (/home/user/VSD_bg.pub), сгенерированный в ОС Linux, импортируем в специальный файл SSH ключей authorized_keys с помощью команды:
cat /home/user/VSD_bg.pub >> /home/user/.ssh/authorized_keys
Теперь публичный ключ (.pub) можно удалить:
rm /home/user/VDS_bg.pub
Настройка авторизации с SSH key на сервере
Для настройки авторизации с SSH key на сервере нам понадобятся права суперпользователя (root).
Правим конфигурационный файл /etc/ssh/sshd_config. Запрещаем пользователю root авторизацию по SSH:
PermitRootLogin no
Запрещаем авторизацию по SSH с помощью логина и пароля:
PasswordAuthentication no

Сохраняем изменения в конфигурационном файле и перезапускаем SSH сервер:
/etc/init.d/ssh restart
Настройка PuTTY c SSH key (Windows)
Запускаем программу PuTTY. В окне PuTTY Configuration выбираем раздел Connection, подраздел SSH, а в нем — подраздел Auth. Указываем в поле Private key file for authentication имя приватного ключа (.ppk) и полный путь к нему:

В разделе Connection, в подразделе Data, в поле Auto-login username указываем имя пользователя, от имени которого будет осуществляться доступ на сервер. У нас это user.

В разделе Session проверяем, что в поле Host Name (or IP address) — IP адрес нужного сервера, в поле Port — цифра 22. Нажимаем кнопку Save, а затем кнопку Open:

PuTTY запросит ввод парольной фразы (Passphrase), которой мы защитили SSH key. Чтобы не вводить парольную фразу каждый раз при запуске PuTTY, можно запустить программу Pageant (pageant.exe), ввести парольную фразу в этой программе, и приватный ключ будет в памяти компьютера, и ввода парольной фразы при запуске PuTTY не потребуется.
Запускаем программу Pageant (pageant.exe), эта программа тоже устанавливается вместе с программой PuTTY:

В системном трее (области уведомлений) Windows появится иконка этой программы. Кликаем два раза по этой иконке компьютерной мышью. Появится окно Pageant Key List. Нажимаем кнопку Add Key:

Выбираем приватный ключ (.ppk), вводим парольную фразу (passphrase) к нему и нажимаем кнопку Ok:

Все! Приватный ключ в памяти компьютера. Можно запускать PuTTY и устанавливать соединение с сервером по протоколу SSH с авторизацией с помощью SSH key и без ввода парольной фразы к SSH ключу:

Доступ по SSH с SSH key (Linux)
В ОС Linux для доступа на сервер по SSH с авторизацией с помощью SSH key вводим команду:
ssh -i /home/sha/VSD_bg user@123.45.67.89
где /home/sha/VSD_bg
— это полный путь к приватному ключу с именем VSD_bg;
user
— имя пользователя, от имени которого осуществляется доступ на сервер;
123.45.67.89
— это IP адрес сервера.
Выводы
SSH key вместо логина и пароля ОБЯЗАТЕЛЕН при использовании собственного сервера с открытым для всех SSH портом 22.
Обсуждаем статью в комментариях под статьей. Присоединяйтесь!
Комментарии
Если SSH соединение разрывается при «неактивности», и это неудобно, то в Linux, в ssh выставляем значение 60 для параметра ServerAliveInterval:
ssh -o ServerAliveInterval=60 -i /home/sha/VSD_bg user@123.45.67.89
А в Windows, в PuTTY в разделе Connection выставляем значение 60 для параметра Seconds between keepalives (0 to turn off).