Tutorial

Настройка ключей SSH в CentOS 8

Linux BasicsCentOSGetting StartedSecuritySystem ToolsCentOS 8

Введение

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

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

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

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

  • ssh-keygen

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

Если вы решите перезаписать ключ на диске, вы больше не сможете выполнять аутентификацию с помощью предыдущего ключа. Будьте осторожны при выборе варианта 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 — Копирование открытого ключа на сервер CentOS

Самый быстрый способ скопировать открытый ключ на хост CentOS — использовать утилиту 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 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 к учетной записи на вашем сервере, вы можете выгрузить ключи с помощью стандартного метода 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"

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

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, введите на локальном компьютере следующую команду:

  • 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 существует. При необходимости эта команда создаст директорию, а если она уже существует, команда ничего не сделает:

  • 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

При этом будут рекурсивно удалены все разрешения «group» и «other» для директории ~/.ssh/.

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

  • chown -R sammy:sammy ~/.ssh

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

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

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

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

Первоначальная процедура аналогична аутентификации с помощью пароля:

  • 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, вы войдете в систему немедленно. Если вы указали фразу-пароль, вам будет предложено ввести ее. После аутентификации в оболочке откроется новый сеанс с настроенной учетной записью на сервере CentOS.

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

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

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

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

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

  • sudo vi /etc/ssh/sshd_config

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

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

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

  • sudo systemctl restart sshd

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

  • ssh username@remote_host

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

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

Заключение

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

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

Creative Commons License