Site icon 8HOST.COM

Установка SSH-ключей в Ubuntu 20.04

SSH, или secure shell – это зашифрованный протокол, используемый для безопасного подключения к серверу и управления ним. При работе с сервером Debian, вы, скорее всего, проведете большую часть времени в терминале, подключенном к серверу через SSH.

SSH-ключи – это простой и безопасный способ входа на сервер, их рекомендуется использовать для всех учетных записей. В этом мануале вы узнаете, как настроить ключи SSH на свежем сервере Ubuntu 20.04.

1: Создание пары ключей

Для начала нужно создать пару ключей на клиентской машине (как правило, это ваш компьютер):

ssh-keygen

По умолчанию команда ssh-keygen создает пару 3072-битных RSA-ключей, для большинства случаев это достаточно надежные ключи (вы можете добавить в команду опцию -b 4096, чтобы создать более длинный 4096-битный ключ).

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

Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

Нажмите Enter, чтобы сохранить ваши ключи в каталог .ssh/ в домашнем каталоге, при желании укажите другой путь.

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

/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

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

После этого вы увидите:

Enter passphrase (empty for no passphrase):

В это поле можно ввести сложную парольную фразу. Настоятельно рекомендуем ее использовать: это добавляет уровень безопасности для предотвращения входа неавторизованных пользователей в систему.

Читайте также: Настройка аутентификации на основе SSH-ключей на сервере Linux

На экране появится такой вывод:

Your identification has been saved in /your_home/.ssh/id_rsa
Your public key has been saved in /your_home/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host
The key's randomart image is:
+---[RSA 3072]----+
|                .|
|               + |
|              +  |
| .           o . |
|o       S   . o  |
| + o. .oo. ..  .o|
|o = oooooEo+ ...o|
|.. o *o+=.*+o....|
|    =+=ooB=o.... |
+----[SHA256]-----+

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

2: Копирование открытого ключа на сервер Ubuntu

Самый быстрый способ скопировать открытый ключ на хост Ubuntu – это использовать утилиту ssh-copy-id. Этот метод очень прост, потому используйте его, если у вас есть такая утилита. Если на вашем клиентском компьютере нет ssh-copy-id, вы можете использовать один из двух альтернативных методов – копирование через парольную аутентификацию SSH или копирование ключа вручную (они описаны в этом разделе ниже).

Копирование ключа с помощью ssh-copy-id

Утилита ssh-copy-id по умолчанию установлена во многих операционных системах, поэтому вы можете использовать ее в своей локальной системе. Чтобы этот метод работал, у вас уже должен быть парольный доступ SSH к серверу.

Этой утилите нужно указать удаленный хост, к которому вы хотите подключиться, и учетную запись пользователя, к которой у вас есть SSH-доступ. На эту учетную запись и будет скопирован ваш открытый SSH ключ.

Утилита использует такой синтаксис:

ssh-copy-id username@remote_host

Вы увидите такой вывод:

The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Это значит, что ваш локальный компьютер не распознал удаленный хост. Так всегда бывает при первом подключении к новому хосту. Введите yes и нажмите Enter, чтобы продолжить.

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

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
username@203.0.113.1's password:

Введите свой пароль (при этом ввод символов не будет отображаться из соображений безопасности) и нажмите Enter. Утилита подключится к учетной записи на удаленном хосте, используя предоставленный вами пароль. Затем она скопирует содержимое файла ~/.ssh/id_rsa.pub в файл authorized_keys в домашнем каталоге ~/.ssh удаленного пользователя.

Вы увидите на экране такой вывод:

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

Теперь ключ id_rsa.pub скопирован на удаленную учетную запись. Переходите к разделу 3.

Копирование открытого ключа по SSH

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

Для этого используйте команду cat, которая прочитает содержимое файла открытого SSH-ключа на локальном компьютере, а затем добавьте конвейер, который передаст ключ по SSH. После этого нужно убедиться, что каталог ~/.ssh существует в учетной записи удаленного пользователя, а затем проверить его содержимое.

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

Нужная нам команда выглядит так:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Вы можете увидеть на экране такое сообщение:

The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Это значит, что ваш локальный компьютер не распознает удаленный хост. Так обычно бывает при первом подключении к новому хосту. Введите yes и нажмите Enter, чтобы продолжить.

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

username@203.0.113.1's password:

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

Копирование открытого ключа вручную

Если у вас нет парольного доступа и утилиты ssh-copy-id, вам придется выполнить весь процесс вручную: вручную вставить содержимое файла id_rsa.pub в файл ~/.ssh/authorized_keys на удаленной машине.

Чтобы отобразить содержимое id_rsa.pub, на локальной машине, введите:

cat ~/.ssh/id_rsa.pub

На экране появится такой ключ:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Любым доступным способом подключитесь к вашему удаленному хосту.

Затем убедитесь, что каталог ~/.ssh существует. В случае необходимости эта команда создаст каталог (или не сделает ничего, если он уже существует):

mkdir -p ~/.ssh

Теперь в этом каталоге вы можете создать или изменить файл authorized_keys. Вы можете добавить содержимое id_rsa.pub в конец файла с помощью команды:

echo public_key_string >> ~/.ssh/authorized_keys

Если файл authorized_keys не существует, команда его создаст.

В приведенной команде замените public_key_string выводом команды cat ~/.ssh/id_rsa.pub в локальной системе. Он должен начинаться с ssh-rsa AAAA ….

Теперь нужно убедиться, что каталог ~/.ssh и файл authorized_keys имеют необходимые права доступа.

chmod -R go= ~/.ssh

Это заблокирует доступ к каталогу ~/.ssh/ для всех групп и других пользователей.

Если вы используете root-пользователя для настройки ключей другого пользователя, важно, чтобы каталог ~/.ssh принадлежал целевому пользователю, а не root:

chown -R 8host:8host ~/.ssh

Теперь можно проверить, как работает беспарольная аутентификация на сервере Ubuntu.

3: Аутентификация по SSH-ключам

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

Введите команду:

ssh username@remote_host

Если вы впервые подключаетесь к этому хосту (к примеру, если вы копировали ключ вручную), вы можете увидеть предупреждение:

The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Это значит, что ваш локальный компьютер не распознает удаленный хост. Введите yes и нажмите Enter.

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

Если аутентификация по ключам прошла успешно, можно отключить парольную аутентификацию, чтобы повысить защиту сервера.

4: Отключение парольной аутентификации

Если вы успешно вошли в свою учетную запись с помощью SSH-ключей, без пароля, вам лучше совсем отключить механизм парольной аутентификации, чтобы защитить сервер от brute-force атак.

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

Убедившись, что ваша удаленная учетная запись имеет все необходимые привилегии, войдите на свой удаленный сервер с помощью SSH-ключей (либо с правами администратора, либо через пользователя с привилегиями sudo). Затем откройте файл конфигурации демона SSH:

sudo nano /etc/ssh/sshd_config

Внутри файла найдите директиву PasswordAuthentication. Она может быть закомментирована. Раскомментируйте эту строку и установите значение «no». Это отключит возможность входа в систему через SSH с использованием паролей учетных записей:

. . .
PasswordAuthentication no
. . .

Сохраните и закройте файл. Чтобы обновить настройки, необходимо перезапустить сервис sshd:

sudo systemctl restart ssh

В качестве меры предосторожности откройте новое окно и проверьте работу сервиса SSH:

ssh username@remote_host

После того как вы подтвердили работу сервиса SSH, можете закрыть все текущие сессии на сервере.

Теперь демон SSH на сервере Ubuntu поддерживает только аутентификацию по SSH-ключам. Парольная аутентификация успешно отключена.

Заключение

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

Читайте также: