Подключение к серверу с помощью SSH-ключей
Введение
Механизм генерации ssh-ключей был подробно описан в этой статье. Сегодня мы рассмотрим различные способы переноса открытого ключа на сервер, а также настройку дополнительных параметров безопасности.
Предварительная настройка сервера
В качестве изначальных данных у нас готов открытый ключ на клиентской машине, так же есть доступ к root по паролю на сервере.
При первом подключении необходимо подтвердить, что мы хотим установить соединение с удаленным сервером. Далее вводим пароль и вход в систему будет выполнен.
Мы настоятельно рекомендуем отключить возможность подключения к суперпользователю root через ssh. Поэтому нам необходимо создать нового пользователя для удаленного подключения и скопировать для него открытый ключ.
Создаем нового пользователя:
adduser <имя пользователя>
Добавляем его в группу администраторов:
adduser <имя пользователя> sudo
Переключаемся в созданную учетную запись
su <имя пользователя>
Заходим в корневую папку созданного пользователя:
cd
Создаем директорию .ssh:
mkdir .ssh
Устанавливаем текущему пользователю права на чтение, запись и выполнение. Остальные пользователи и группы пользователей не имеют никаких прав.
chmod 700 .ssh
Новый пользователь и директория для хранения ключей созданы, переходим непосредственно к переносу ключей.
Автоматическое копирование ключа для Debian/Ubuntu
На Debian/Ubuntu для автоматической передачи ключа можно использовать команду:
ssh-copy-id user@IP_server
где
user – это имя пользователя на удаленном сервере;
IP_server – IP-адрес сервера.
После копирования ключа вводим следующую команду:
ssh user@IP_server
В нашем случае она выглядит следующим образом:
ssh admin@192.168.1.160
Мы зашли на удаленный сервер, ввод пароля не потребовался.
Создадим ключ ed25519 и скопируем его на сервер:
Проверим на сервере созданные ключи в директории ~/.ssh
Откроем ключ на клиенте:
Проверим содержимое файла ssh_host_ed25519 на сервере:
Содержимое ключей идентичны, копирование прошло успешно.
Ручное копирование ключа
Для ручного копирования ключа будем использовать утилиту scp, входящую в стандартный пакет программ для Windows 10/11, Ubuntu/Debian. Настройки будем производить на примере ОС Windows 10.
Синтаксис команды выглядит следующим образом:
scp route\ssh_key.pub user@IP-server:/home/user/.ssh/
где
route – путь до ключа
ssh_key.pub – имя ключа, расширение .pub.
user – имя пользователя на сервере
В нашем случае:
scp C:\Users\jetcry\.ssh\id_ed25519.pub admin@192.168.1.160:/home/admin/.ssh/
Появится результат выполнения команды:
Переходим на сервер. Необходимо содержимое ключа скопировать в файл authorized_keys, который еще не создан. Воспользуемся следующими командами:
cd ~/.ssh
cat id_ed25519.pub >> authorized_keys
Открываем файл, проверяем, что все получилось:
nano authorized_keys
Ключ скопирован в ручном режиме.
Создание сервера на HostVDS и подключение к нему с помощью SSH-ключей
На сайте hostvds.com выберем создать новый сервер. Укажем его местоположение, подберем тарифный план и образ системы. После этого нажмем «+» в поле “SSH-ключ”.
Дополнительная защита подключения к серверу
Настройки будем выполнять в файле /etc/ssh/sshd_config. Открываем его с помощью редактора nano
sudo nano /etc/ssh/sshd_config
Укажем подключение по SSH через другой порт. Расскомментируем строчку #Port 22 и укажем любой другой номер порта из частного (динамического) диапазона операционной системы: от 49152 до 65535.
Port 59898
Если Вы хотите выбрать другой порт для работы протокола ssh, необходимо убедиться, что он не занят системой. Для этого воспользуйтесь утилитой netstat.
Далее отключим возможность подключения к суперпользователю root и вход с помощью пароля.
Удаляем возможность подключения через root:
PermitRootLogin no
Удаляем возможность подключения с помощью пароля:
PasswordAuthentication no
PermitEmptyPasswords no
Указываем, что подключение идет только с помощью ключей:
PubkeyAuthentication yes
Сохраняем: Ctrl+O. Enter (соглашаемся с именем сохраняемого файла).
Выходим из файла с помощью Сtrl+X.
Переходим в директорию sshd_config:
cd /etc/ssh/sshd_config
Проверяем наличие там дополнительных файлов конфигурации командой ls
Запрещаем подключение с помощью пароля (меняем “yes” на “no”)
Перезапускаем службу ssh
sudo systemctl restart ssh
Теперь при подключении к пользователям root и admin по ssh будет ошибка. Подключение будет доступно только при указании верного номера порта для протокола ssh.
Если на клиенте перенести ключи из папки .ssh, то подключение будет так же запрещено, даже с указанием номера порта
Укажем с помощью параметра -i, какой ключ следует использовать для подключения:
ssh admin@192.168.1.160 -i C:\Users\jetcry\id_ed25519 -p 59898
Вход выполнен. Мы завершили настройку дополнительной безопасности при подключении к серверу.
Краткие итоги
- Использование SSH-ключей для аутентификации обеспечивает максимальный уровень безопасности при подключении к удаленному серверу.
- Закрытый ключ остается на клиентской машине, открытый копируется на сервер.
- Команда ssh-copy-id – автоматическое копирование ключа в Ubuntu/Debian.
- Утилита scp – копирование ключа в ручном режиме.
- Для обеспечения дополнительной безопасности измените номер порта для протокола ssh, удалите возможность подключения к суперпользователю root и запретите использование паролей.