SSH (secure shell, безопасная оболочка) представляет собой шифрованный протокол для администрирования и взаимодействия между серверами. Во время работы с сервером Ubuntu вы, скорее всего, будете проводить большую часть времени в вашем терминале, подключенном через SSH к вашему серверу.
В этом руководстве мы рассмотрим процесс настройки ключей SSH на вновь установленной Ubuntu. Ключи SSH представляют собой простой и безопасный способ входа на ваш сервер, и являются рекомендованным способом входа для всех пользователей.
Сперва создадим пару ключей на клиентской машине (обычно, это ваш компьютер):
- 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/
внутри вашей домашней директории или задайте другую директорию.
Если ранее вы уже генерировали пару SSH ключей, вы можете увидеть следующий вывод:
Вывод/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
Если вы выберете перезаписать ключи на диск, вы не сможете использовать старые ключи для аутентификации. Будьте очень осторожны при выборе yes
, это решение нельзя будет отменить.
Вы должны увидеть следующий вывод:
ВыводEnter passphrase (empty for no passphrase):
Здесь вы можете задать ключевую фразу (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:
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 для входа.
Самым быстрым способом скопировать ваш публичный ключ на машину с Ubuntu - использовать утилиту ssh-copy-id
. Поскольку этот метод невероятно прост, он рекомендуется для использования в первую очередь. Если по какой либо причине использование ssh-copy-id
невозможно, вы можете использовать один из двух альтернативных методов, описанных далее (копирование в входом по SSH с использованием пароля и ручное копирование ключа).
ssh-copy-id
Утилита ssh-copy-id
доступна по умолчанию во многих операционных системах, поэтому, скорее всего, она доступна и на вашей локальной машине. Для использования этого метода копирования ключа вам необходимо иметь доступ к своему серверу по SSH с использованием пароля.
Для использования утилиты вам необходимо указать адрес удалённого хоста, к которому вы хотите подключиться, а также имя пользователя, имеющего доступ к хосту по SSH. Именно для аккаунта этого пользователя и будет скопирован ваш публичный ключ SSH.
Синтаксис команды выглядит следующим образом:
- 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-copy-id
, но у вас есть пароль для входа по SSH на ваш удалённый сервер, мы можете загрузить свой ключ вручную.
Для этого можно использовать команду cat
, которая прочитает содержимое файла публичного ключа на локальной машине, а затем мы сможем отправить прочитанные данные ключа по 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"
Вы можете увидеть вывод следующего вида:
Вывод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 с использованием пароля, вам придётся проделать описанный выше процесс вручную.
Мы вручную добавим содержимое вашего файла 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== demo@test
Зайдите на вашу удалённую машину любым доступным для вас способом.
Далее нам необходимо убедиться, что директория ~/.ssh
существует. Следующая команда создаст директорию, если её не существует или не сделает ничего, если директория была создана ранее:
- mkdir -p ~/.ssh
Теперь вы можете создать или отредактировать файл authorized_keys
внутри этой директории. Вы можете добавить содержимое файла id_rsa.pub
в конец файла authorized_keys
, при необходимости создав его, следующей командой:
- echo строка_публичного_ключа >> ~/.ssh/authorized_keys
В команде выше замените строка_публичного_ключа
на вывод команды 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
, вам же следует использовать имя своего пользователя в команде выше.
Теперь мы можем попробовать аутентифицироваться на нашем Ubuntu сервере без пароля.
Если вы успешно проделали описанные выше шаги по переносу публичного ключа, вы должны быть способны зайти на свой удалённый хост без использования пароля.
Процесс входа выглядит так же:
- ssh username@remote_host
Если вы заходите на удалённый хост по SSH в первый раз, вы можете увидеть вывод следующего вида:
Вывод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
для продолжения.
Если при создании пары ключей вы не задали ключевую фразу (passphrase), вы будете залогинены автоматически. Если вы задали ключевую фразу, вам будет предложено её ввести (обратите внимание, что вводимые символы не будут отображаться на экране в целях безопасности). После аутентификации откроется новая сессия оболочки (shell session) на удалённом хосте от имени используемого вами удалённого аккаунта пользователя.
Если аутентификация по ключу прошла успешно, рекомендуем ознакомиться с тем, как далее повысить безопасность вашего сервера путём отключения входа по паролю.
Если вам удалось войти в ваш удалённый аккаунт на удалённом хосте по SSH без ввода пароля, вы успешно настроили аутентификацию по ключу SSH для вашего аккаунта. Однако возможность входить на сервер с использованием пароля всё есть активна, что означает, что ваш сервер уязвим для атак с перебором пароля (brute-force attacks).
Перед тем как следовать дальнейшим инструкциям, убедитесь, что вы настроили аутентификацию по ключу SSH для вашего пользователя root
или для пользователя с привилегиями sudo
на вашем сервере. После завершения описанных далее процедур вход по паролю станет недоступен, поэтому очень важно убедиться, что у вас остаётся доступ к вашему серверу.
Как только вы убедитесь, что аккаунт вашего удалённого пользователя имеет привилегии администратора, войдите на сервер с использованием аутентификации по ключу SSH, используя либо аккаунт root
, либо аккаунт пользователя с привилегиями sudo
. Далее откройте конфигурационный файл демона SSH:
- sudo nano /etc/ssh/sshd_config
Внутри файла найдите директиву PasswordAuthentication
. Она может быть закомментирована. Раскомментируйте её при необходимости и установите её значение в “no”. Это отключит возможность входа на сервер по паролю.
...
PasswordAuthentication no
...
Сохраните и закройте файл нажав CTRL
+ X
, затем Y
для подтверждения сохранения файла, а далее ENTER
для выхода из текстового редактора nano. Для применения внесённых изменений нам необходимо перезапустить сервис sshd
:
- sudo systemctl restart ssh
В качестве меры предосторожности откройте новое окно терминала и проверьте, что соединение по SSH работает корректно, перед тем, как закрывать текущую сессию:
- 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.
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!