SSH - создание и использование ключей в системе Ubuntu

2024-02-12 20:09
152
Ця стаття на мовах: UA / RU

Стаття у розділах:

Термінал Сервера

Зміст

Вступ

SSH, або Secure Shell, - это шифрованный протокол, который используется для администрирования и общения с серверами. Работая с сервером Ubuntu, вы, вероятно, проводите большую часть времени в терминальном сеансе, подключенном к вашему серверу через SSH.

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

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

Первым шагом является создание пары ключей на клиентской машине (обычно это ваш компьютер):

ssh-keygen

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

После ввода команды вы должны увидеть такой результат:

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

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

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

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

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

После этого вы должны увидеть сообщение, аналогичное этому:

Output
Enter passphrase (empty for no passphrase):

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

Затем вы должны увидеть результат, аналогичный этому:

Output
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

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

Output
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, который мы создали ранее. Когда он найдет ключ, он попросит вас ввести пароль учетной записи удаленного пользователя:

Output
/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
[email protected]'s password:

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

Вы должны увидеть следующий результат:

Output
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
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 существует и имеет соответствующие разрешения под вашим учетным записью.

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

Вот полная команда:

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

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

Output
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

После этого вас попросят ввести пароль удаленного пользователя.

Output
[email protected]'s password:

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

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

Если у вас нет доступа по SSH с использованием пароля на ваш сервер, вам придется скопировать ключи вручную.

Вручную добавьте содержимое вашего файла id_rsa.pub в файл authorized_keys в каталоге ~/.ssh на вашем удаленном компьютере.

Сначала выведите содержимое файла id_rsa.pub на вашем локальном компьютере:

cat ~/.ssh/id_rsa.pub

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

Output
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 в конец файла authorized_keys с помощью этой команды, создав его при необходимости:

echo public_key_string >> ~/.ssh/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 sammy:sammy ~/.ssh

В этом инструкции имя пользователя sammy заменено на ваше соответствующее имя пользователя.

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

Шаг 3 — Аутентификация на сервере Ubuntu с использованием ключей SSH

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

Основной процесс такой же:

ssh имя_пользователя@удаленный_хост

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

Output
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, чтобы продолжить.

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

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

Шаг 4 — Отключение аутентификации по паролю на вашем сервере

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

  • Войдите на сервер с помощью SSH или как пользователь с привилегиями sudo. 
  • Откройте файл конфигурации sshd:

sudo nano /etc/ssh/sshd_config

  • Найдите строку, начинающуюся с PasswordAuthentication. Раскомментируйте эту строку, удалив # в начале, и установите значение на no:

PasswordAuthentication no

  • Сохраните изменения и закройте файл. 
  • Перезапустите службу SSH, чтобы применить изменения:

sudo systemctl restart ssh

Откройте новое терминальное окно и убедитесь, что вы можете успешно войти на сервер с помощью SSH, прежде чем закрывать текущий сеанс:

ssh имя_пользователя@удаленный_хост

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

Заключение

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


Сподобалась стаття? Читайте нас в телеграм