Введение
SSH, или безопасный шелл, является зашифрованным протоколом, используемым для администрирования и обмена данными с серверами. При работе с сервером Rocky Linux вы, вероятно, проведете большую часть времени в терминальной сессии, подключенной к вашему серверу через SSH.
В этом руководстве мы сосредоточимся на настройке SSH-ключей для сервера Rocky Linux 9. SSH-ключи обеспечивают простой и безопасный метод входа на ваш сервер и рекомендуются для всех пользователей.
Шаг 1 — Создание ключевой пары RSA
Первым шагом является создание ключевой пары на клиентской машине (обычно вашем локальном компьютере):
- ssh-keygen
По умолчанию ssh-keygen
создаст ключевую пару RSA с длиной 2048 бит, которая достаточно безопасна для большинства случаев использования (при необходимости вы можете передать флаг -b 4096
для создания более крупного ключа с длиной 4096 бит).
После ввода команды вы должны увидеть следующий запрос:
OutputGenerating 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”, так как это разрушительный процесс, который нельзя отменить.
Затем вы должны увидеть следующий запрос:
OutputEnter passphrase (empty for no passphrase):
Здесь вы можете дополнительно ввести безопасную фразу, что крайне рекомендуется. Фраза добавляет дополнительный уровень безопасности к вашему ключу, чтобы предотвратить вход неавторизованных пользователей.
Затем вы должны увидеть следующий вывод:
OutputYour 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:
- ssh-copy-id username@remote_host
Возможно, вы увидите следующее сообщение:
OutputThe 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
удаленной учетной записи.
Вы должны увидеть следующий вывод:
OutputNumber 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
в этом каталоге. Мы будем использовать символ перенаправления >>
, чтобы добавить содержимое, а не перезаписать его. Это позволит нам добавлять ключи, не уничтожая ранее добавленные ключи.
Полная команда выглядит следующим образом:
- cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Вы можете увидеть следующее сообщение:
OutputThe 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
, чтобы продолжить.
Затем вас должны попросить ввести пароль для удаленной учетной записи пользователя:
Outputusername@203.0.113.1's password:
После ввода пароля содержимое вашего ключа id_rsa.pub
будет скопировано в конец файла authorized_keys
учетной записи удаленного пользователя. Продолжайте к Шагу 3, если это было успешно.
Копирование общего ключа вручную
Если у вас нет доступа к серверу по паролю через SSH, вам придется выполнить вышеуказанный процесс вручную.
Мы вручную добавим содержимое вашего файла id_rsa.pub
в файл ~/.ssh/authorized_keys
на вашем удаленном компьютере.
Чтобы отобразить содержимое вашего ключа id_rsa.pub
, введите это на вашем локальном компьютере:
- cat ~/.ssh/id_rsa.pub
Вы увидите содержимое ключа, которое должно выглядеть примерно так:
Outputssh-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
существует. Эта команда создаст каталог при необходимости, или ничего не сделает, если он уже существует:
- 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, но вы должны заменить соответствующее имя пользователя в вышеприведенной команде.
Теперь мы можем попробовать аутентификацию на основе ключей с нашим сервером Rocky Linux.
Шаг 3 — Вход в ваш сервер Rocky Linux с использованием ключей SSH
Если вы успешно выполнили одну из вышеуказанных процедур, теперь вы должны иметь возможность войти в удаленный хост без пароля удаленной учетной записи.
Исходный процесс такой же, как при аутентификации на основе пароля:
- ssh username@remote_host
Если вы подключаетесь к этому хосту впервые (если вы использовали последний метод выше), вы можете увидеть нечто подобное:
OutputThe 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:
- sudo vi /etc/ssh/sshd_config
Внутри файла найдите директиву с именем PasswordAuthentication
. Она может быть закомментирована символом #
. Нажмите i
, чтобы войти в режим вставки vi
, затем раскомментируйте строку и установите значение no
. Это отключит возможность входа по SSH с использованием учетных записей и паролей:
...
PasswordAuthentication no
...
Когда вы закончите внесение изменений, нажмите ESC
, а затем :wq
, чтобы записать изменения в файл и выйти. Чтобы фактически внедрить эти изменения, нам нужно перезапустить службу sshd
:
- sudo systemctl restart sshd
Как предосторожность, откройте новое окно терминала и проверьте, что служба SSH функционирует правильно, прежде чем закрывать текущий сеанс:
- 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