Site icon 8HOST.COM

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

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

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

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

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

ssh-keygen

По умолчанию команда ssh-keygen генерирует пару 2048-битных 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: Копирование открытого ключа на удаленный сервер

Проще всего скопировать открытый ключ на удаленный сервер (в нашем случае это Rocky Linux) при помощи утилиты ssh-copy-id.

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

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

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

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

ssh-copy-id использует такой синтаксис:

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 в ~/.ssh/authorized_keys удаленного пользователя.

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

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== 8host@host

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

Убедитесь, что каталог ~/.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

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

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

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

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

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». Это отключит возможность входа в систему по паролю:

. . .
PasswordAuthentication no
. . .

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

sudo systemctl restart ssh

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

ssh username@remote_host

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

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

Заключение

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

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