SSH или защищенная оболочка — это шифрованный протокол, используемый для администрирования и связи с серверами. При работе с сервером CentOS вы с большой вероятностью проведете больше всего времени в сеансах терминала с подключением к серверу через SSH.
В этом обучающем руководстве мы расскажем о настройке ключей SSH для сервера CentOS 8. Ключи SSH обеспечивают простой и безопасный способ входа на сервер, и их использование рекомендовано для всех пользователей.
Первый шаг — создание пары ключей на клиентской системе (обычно на вашем локальном компьютере):
- ssh-keygen
По умолчанию команда ssh-keygen
создает пару 2048-битных ключей RSA. Этот уровень защиты достаточен для большинства случаев (но при желании вы можете использовать флаг -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 для входа в систему.
Самый быстрый способ скопировать открытый ключ на хост CentOS — использовать утилиту 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-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"
Вы можете увидеть следующее сообщение:
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
При этом будут рекурсивно удалены все разрешения «group» и «other» для директории ~/.ssh/
.
Если вы используете учетную запись root
для настройки ключей учетной записи пользователя, важно учитывать, что директория ~/.ssh
принадлежит пользователю, а не пользователю root
:
- chown -R sammy:sammy ~/.ssh
В этом обучающем руководстве мы используем имя пользователя sammy, но вы можете заменить его в вышеприведенной команде другим используемым вами именем.
Теперь мы можем попробовать настроить аутентификацию на базе ключа на нашем сервере CentOS.
Если вы успешно выполнили одну из вышеописанных процедур, теперь вы сможете войти на удаленный хост без пароля учетной записи для удаленного хоста.
Первоначальная процедура аналогична аутентификации с помощью пароля:
- 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, вы войдете в систему немедленно. Если вы указали фразу-пароль, вам будет предложено ввести ее. После аутентификации в оболочке откроется новый сеанс с настроенной учетной записью на сервере CentOS.
Если аутентификация на базе ключа выполнена успешно, вы можете переходить к изучению дополнительных возможностей защиты системы посредством отключения аутентификации с помощью пароля для вашего сервера.
Если вы смогли войти в свою учетную запись с помощью SSH без пароля, это означает, что вы успешно настроили для своей учетной записи аутентификацию на базе ключей SSH. Однако механизм аутентификации по паролю все еще активен, то есть ваш сервер может подвергнуться атаке посредством простого перебора паролей.
Прежде чем выполнять описанные в настоящем разделе шаги, убедитесь, что вы настроили аутентификацию на базе ключей SSH для учетной записи root на этом сервере, или (предпочтительно) вы настроили аутентификацию на базе ключей SSH для учетной записи сервера без привилегий root и с привилегиями 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 на вашем сервере CentOS будет реагировать только на ключи SSH. Аутентификация на базе паролей успешно отключена.
Теперь на вашем сервере должна быть настроена аутентификация на базе ключей SSH, чтобы вы могли входить в систему без пароля учетной записи.
Если вы хотите узнать больше о работе с SSH, посмотрите наше Руководство по основам SSH.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!