Tutorial

Настройка ключей SSH в Ubuntu 20.04

Published on May 13, 2020
Русский
Настройка ключей SSH в Ubuntu 20.04

Введение

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

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

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

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

  1. ssh-keygen

По умолчанию последние версии ssh-keygen будут создавать 3072-битную пару ключей 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):

Здесь вы можете ввести защищенный пароль, что настоятельно рекомендуется сделать. Пароль добавляет дополнительный уровень безопасности для защиты от входа в систему несанкционированных пользователей. Дополнительную информацию о безопасности можно найти в нашем обучающем модуле Настройка аутентификации на базе ключей SSH на сервере Linux.

Вывод затем должен выглядеть примерно следующим образом:

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: 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 — Копирование открытого ключа на сервер Ubuntu

Самый быстрый способ скопировать открытый ключ на хост Ubuntu — использовать утилиту ssh-copy-id. Это самый простой способ, поэтому его рекомендуется использовать, если он доступен. Если на клиентском компьютере нет утилиты ssh-copy-id, вы можете использовать один из двух альтернативных методов, описанных в этом разделе (копирование через SSH на базе пароля или копирование ключа вручную).

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

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

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

Синтаксис выглядит следующим образом:

  1. 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 в этом каталоге. Мы используем символ перенаправления >>, чтобы дополнять содержимое, а не заменять его. Это позволяет добавлять ключи без уничтожения ранее добавленных ключей.

Полная команда выглядит следующим образом:

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

  1. 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== demo@test

Получите доступ к удаленному хосту с использованием любого доступного метода.

После получения доступа к учетной записи на удаленном сервере убедитесь, что каталог ~/.ssh существует. При необходимости эта команда создаст директорию, а если она уже существует, команда ничего не сделает:

  1. mkdir -p ~/.ssh

Теперь вы можете создать или изменить файл authorized_keys в этой директории. Вы можете добавить содержимое файла id_rsa.pub в конец файла authorized_keys и при необходимости создать его с помощью этой команды:

  1. echo public_key_string >> ~/.ssh/authorized_keys

В вышеуказанной команде замените public_key_string результатами команды cat ~/.ssh/id_rsa.pub, выполненной на локальном компьютере. Она должна начинаться с ssh-rsa AAAA....

Наконец, нужно убедиться, что директория ~/.ssh и файл authorized_keys имеют соответствующий набор разрешений:

  1. chmod -R go= ~/.ssh

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

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

  1. chown -R sammy:sammy ~/.ssh

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

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

Шаг 3 — Аутентификация на вашем сервере Ubuntu с помощью ключей SSH

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

Базовый процесс выглядит аналогично:

  1. 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, чтобы продолжить.

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

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

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

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

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

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

  1. sudo nano /etc/ssh/sshd_config

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

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

Сохраните и закройте файл, нажав CTRL+X, затем нажмите Y для подтверждения сохранения файла, а затем нажмите ENTER для выхода из nano. Для фактической активации этих изменений нужно перезапустить службу sshd:

  1. sudo systemctl restart ssh

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

  1. ssh username@remote_host

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

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

Заключение

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

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

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
1 Comments


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!

Thank you

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel