SSH, или secure shell – это протокол шифрования, предназначенный для подключения к серверу и управления ним. При работе с сервером CentOS вы, скорее всего, проведете большую часть времени в сеансе терминала, подключенного к серверу именно по SSH.
В этом мануале вы узнаете, как настроить SSH-ключи на новом сервере CentOS 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:
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: Копирование открытого ключа на сервер
Самый быстрый способ скопировать открытый ключ на хост CentOS – это утилита 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 в файл 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.
Копирование открытого ключа вручную
Если у вас нет парольного доступа, вам придется выполнить описанный выше процесс вручную.
При этом нужно вставить содержимое файла 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 в конец файла authorized_keys с помощью этой команды:
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
Теперь пора проверить, как работает беспарольная аутентификация на сервере CentOS.
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 vi /etc/ssh/sshd_config
Внутри файла найдите директиву PasswordAuthentication. Она может быть закомментирована символом #. Нажмите i, чтобы перевести редактор vi в режим вставки, раскомментируйте строку и установите значение «no». Это отключит возможность входа в систему через SSH с использованием паролей учетных записей:
...
PasswordAuthentication no
...
Сохраните и закройте файл. Чтобы обновить настройки, необходимо перезапустить сервис sshd:
sudo systemctl restart sshd
В качестве меры предосторожности откройте новое окно терминала и проверьте работу сервиса SSH:
ssh username@remote_host
После того как вы подтвердите работу SSH, вы сможете закрыть все текущие сеансы сервера.
Теперь демон SSH на вашем сервере CentOS поддерживает только аутентификацию по SSH-ключам. Парольная аутентификация успешно отключена.
Заключение
Ваш сервер поддерживает аутентификацию на основе SSH-ключей, что позволяет вам войти в систему без пароля учетной записи.