Как настроить SSH-ключи в Rocky Linux 9

Введение

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

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

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

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

  1. ssh-keygen

По умолчанию ssh-keygen создаст ключевую пару RSA с длиной 2048 бит, которая достаточно безопасна для большинства случаев использования (при необходимости вы можете передать флаг -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)?

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

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

Output
Enter passphrase (empty for no passphrase):

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

Затем вы должны увидеть следующий вывод:

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: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+

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

Шаг 2 — Копирование открытого ключа на ваш сервер с Rocky Linux

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

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

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

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

  1. 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 username@203.0.113.1'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 '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.

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

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

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

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

  1. 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

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

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

Output
username@203.0.113.1's password:

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

Копирование общего ключа вручную

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

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

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

  1. 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== sammy@host

Войдите на ваш хост удаленного доступа, используя любой доступный метод.

После того как у вас будет доступ к вашей учетной записи на удаленном сервере, убедитесь, что каталог ~/.ssh существует. Эта команда создаст каталог при необходимости, или ничего не сделает, если он уже существует:

  1. mkdir -p ~/.ssh

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

  1. echo public_key_string >> ~/.ssh/authorized_keys

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

Наконец, мы убедимся, что для каталога ~/.ssh и файла authorized_keys установлены соответствующие разрешения:

  1. chmod -R go= ~/.ssh

Это рекурсивно удаляет все разрешения “группы” и “других” для каталога ~/.ssh/.

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

  1. chown -R sammy:sammy ~/.ssh

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

Теперь мы можем попробовать аутентификацию на основе ключей с нашим сервером Rocky Linux.

Шаг 3 — Вход в ваш сервер Rocky Linux с использованием ключей SSH

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

Исходный процесс такой же, как при аутентификации на основе пароля:

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

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

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

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

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

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

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

  1. sudo vi /etc/ssh/sshd_config

Внутри файла найдите директиву с именем PasswordAuthentication. Она может быть закомментирована символом #. Нажмите i, чтобы войти в режим вставки vi, затем раскомментируйте строку и установите значение no. Это отключит возможность входа по SSH с использованием учетных записей и паролей:

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

Когда вы закончите внесение изменений, нажмите ESC, а затем :wq, чтобы записать изменения в файл и выйти. Чтобы фактически внедрить эти изменения, нам нужно перезапустить службу sshd:

  1. sudo systemctl restart sshd

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

  1. ssh username@remote_host

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

Демон SSH на вашем сервере Rocky Linux теперь реагирует только на SSH-ключи. Аутентификация по паролю успешно отключена.

Заключение

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

Если вы хотите узнать больше о работе с SSH, ознакомьтесь с нашим Руководством по основам SSH.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-rocky-linux-9