Как настроить SSH-ключи в Ubuntu 16.04

Вступление

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

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

[[step-1 -—- create-the-rsa-key-pair]] == Шаг 1. Создайте пару ключей RSA

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

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)?

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

Затем вы должны увидеть следующую подсказку:

OutputEnter passphrase (empty for no passphrase):

Здесь вы можете ввести безопасную фразу-пароль, что настоятельно рекомендуется. Парольная фраза добавляет дополнительный уровень безопасности для предотвращения входа неавторизованных пользователей. Чтобы узнать больше о безопасности, обратитесь к нашему руководству поHow To Configure SSH Key-Based Authentication on a Linux Server.

Затем вы должны увидеть следующий вывод:

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-ключа для входа в систему.

[[step-2 -—- copy-the-public-key-to-ubuntu-server]] == Шаг 2 - Скопируйте открытый ключ на сервер Ubuntu

Самый быстрый способ скопировать ваш открытый ключ на хост Ubuntu - использовать утилиту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

Это означает, что ваш локальный компьютер не распознает удаленный хост. Это произойдет при первом подключении к новому хосту. Введите «да» и нажмите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
[email protected]'s password:

Введите пароль (ваш ввод не будет отображаться в целях безопасности) и нажмитеENTER. Утилита подключится к учетной записи на удаленном хосте, используя предоставленный вами пароль. Затем он скопирует содержимое вашего ключа~/.ssh/id_rsa.pub в файл в домашнем каталоге удаленной учетной записи~/.ssh с именемauthorized_keys.

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

OutputNumber of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

На этом этапе ваш ключid_rsa.pub загружен в удаленную учетную запись. Вы можете перейти кStep 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"

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

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

Это означает, что ваш локальный компьютер не распознает удаленный хост. Это произойдет при первом подключении к новому хосту. Введите «да» и нажмитеENTER, чтобы продолжить.

После этого вам будет предложено ввести пароль учетной записи удаленного пользователя:

[email protected]'s password:

После ввода пароля содержимое вашего ключаid_rsa.pub будет скопировано в конец файлаauthorized_keys учетной записи удаленного пользователя. Если это удалось, перейдите кStep 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== demo@test

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

Получив доступ к своей учетной записи на удаленном сервере, вы должны убедиться, что каталог~/.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

Это рекурсивно удаляет все «групповые» и «прочие» разрешения для каталога~/.ssh/.

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

chown -R sammy:sammy ~/.ssh

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

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

[[шаг-3 -—- Authenticate-to-ubuntu-server-using-ssh-keys]] == Шаг 3 - Аутентификация на сервере Ubuntu с использованием ключей SSH

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

Основной процесс такой же:

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

Это означает, что ваш локальный компьютер не распознает удаленный хост. Введите «да» и нажмитеENTER, чтобы продолжить.

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

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

[[step-4 -—- disable-password-authentication-on-your-server]] == Шаг 4. Отключите аутентификацию по паролю на вашем сервере

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

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

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

sudo nano /etc/ssh/sshd_config

Внутри файла найдите директивуPasswordAuthentication. Это может быть закомментировано. Раскомментируйте строку и установите значение «нет». Это отключит вашу возможность входа через SSH с использованием паролей учетных записей:

/etc/ssh/sshd_config

...
PasswordAuthentication no
...

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

sudo systemctl restart ssh

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

ssh username@remote_host

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

Теперь демон SSH на вашем сервере Ubuntu отвечает только на ключи SSH. Проверка подлинности на основе пароля успешно отключена.

Заключение

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

Если вы хотите узнать больше о работе с SSH, взгляните на нашSSH Essentials Guide.

Related