Secure Shell (SSH) — это сетевой протокол для создания безопасного соединения между клиентом и сервером. С помощью SSH вы можете запускать команды на удаленных машинах, создавать туннели, перенаправлять порты и многое другое.

SSH поддерживает различные механизмы аутентификации. Двумя наиболее распространенными являются аутентификация на основе пароля и открытого ключа.

Аутентификация с использованием открытого ключа основана на использовании цифровых подписей и является более безопасной и удобной, чем традиционная аутентификация по паролю.

В этой статье объясняется, как генерировать ключи SSH в системах Ubuntu 20.04.

Создание ключей SSH в Ubuntu

Скорее всего, у вас уже есть пара ключей SSH на клиентской машине Ubuntu. Если вы сгенерируете новую пару ключей, старая будет перезаписана. Чтобы проверить, существуют ли файлы ключей, выполните следующую ls команду:

ls -l ~/.ssh/id_*.pub

Если команда возвращает что-то вроде No such file or directory, или no matches found, это означает, что у пользователя нет ключей SSH, и вы можете перейти к следующему шагу и сгенерировать пару ключей SSH. В противном случае, если у вас есть пара ключей SSH, вы можете либо использовать существующие, либо создать резервную копию старых ключей и создать новую пару.

Чтобы сгенерировать новую пару ключей SSH длиной 4096 бит с вашим адресом электронной почты в качестве комментария, запустите:

ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"

Вам будет предложено указать имя файла:

Enter file in which to save the key (/home/yourusername/.ssh/id_rsa):

Расположение и имя файла по умолчанию должно подойти большинству пользователей. Нажмите Enter, чтобы принять и продолжить.

Далее вам будет предложено ввести безопасную парольную фразу. Парольная фраза добавляет дополнительный уровень безопасности. Если вы установите парольную фразу, вам будет предложено вводить ее каждый раз, когда вы используете ключ для входа на удаленный компьютер.

Если вы не хотите устанавливать парольную фразу, нажмите Enter.

Enter passphrase (empty for no passphrase):

Чтобы убедиться, что ваша новая пара ключей SSH сгенерирована, введите:

ls ~/.ssh/id_*

Скопируйте открытый ключ на удаленный сервер

Теперь, когда у вас есть пара ключей SSH, следующим шагом будет копирование открытого ключа на удаленный сервер, которым вы хотите управлять.

Самый простой и рекомендуемый способ скопировать открытый ключ на сервер — использовать этот ssh-copy-idинструмент. На вашей локальной машине введите:

ssh-copy-id remote_username@server_ip_address

Вам будет предложено ввести пароль удаленного пользователя:

remote_username@server_ip_address's password:

После аутентификации пользователя открытый ключ ~/.ssh/id_rsa.pubбудет добавлен к ~/.ssh/authorized_keysфайлу удаленного пользователя, и соединение будет закрыто.

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'username@server_ip_address'"
and check to make sure that only the key(s) you wanted were added.

Если по какой-либо причине ssh-copy-idутилита недоступна на вашем локальном компьютере, используйте следующую команду для копирования открытого ключа:

cat ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Вход на сервер, используя ключи SSH

После выполнения описанных выше шагов вы сможете войти на удаленный сервер без запроса пароля.

Чтобы проверить это, попробуйте войти на свой сервер через SSH:

ssh remote_username@server_ip_address

Если вы не установили парольную фразу для закрытого ключа, вы сразу же войдете в систему. В противном случае вам будет предложено ввести парольную фразу.

Отключение аутентификации по паролю SSH

Отключение аутентификации по паролю добавляет дополнительный уровень безопасности вашему серверу.

Прежде чем отключать аутентификацию по паролю SSH, убедитесь, что вы можете войти на свой сервер без пароля, а пользователь, под которым вы входите, имеет привилегии sudo .

Войдите на свой удаленный сервер:

ssh sudo_user@server_ip_address

Откройте файл конфигурации SSH в текстовом редакторе:

sudo nano /etc/ssh/sshd_config

Найдите следующие директивы и измените их следующим образом:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

После этого сохраните файл и перезапустите службу SSH, набрав:

sudo systemctl restart ssh

В этот момент аутентификация на основе пароля отключена.