Установка SSH-ключей в Ubuntu 18.04
SSH, Ubuntu | Комментировать запись
SSH или secure shell – это зашифрованный протокол, используемый для подключения к серверу и управления ним. При работе с сервером Ubuntu, вы, скорее всего, проведете большую часть времени в сеансе терминала, подключенного к серверу через SSH.
В этом мануале вы узнаете, как настроить ключи SSH на новом сервере Ubuntu 18.04. SSH-ключи обеспечивают простой и безопасный способ входа на сервер и рекомендуются для всех пользователей.
1: Создание пары RSA-ключей
Для начала нужно создать пару ключей на клиентской машине (обычно это ваш компьютер):
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):
Здесь можно ввести надежную парольную фразу, которую настоятельно рекомендуется использовать. Эта парольная фраза добавляет уровень безопасности для предотвращения входа в систему неавторизованных пользователей. Чтобы узнать больше о безопасности, ознакомьтесь с нашим мануалом Настройка аутентификации на основе SSH-ключей на сервере Linux.
Вы увидите такой вывод:
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: Копирование открытого ключа на сервер
Самый быстрый способ скопировать открытый ключ на хост 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
Если у вас нет утилиты ssh-copy-id, но есть пароль SSH для доступа к учетной записи на сервере, вы можете загрузить свои ключи с помощью обычного подключения SSH.
Сделать это можно с помощью команды cat, которая прочитает содержимое файла открытого SSH-ключа на локальном компьютере, и конвейера, который передаст ключ через SSH-соединение. После этого нужно убедиться, что каталог ~/.ssh существует в удаленной учетной записи, а затем проверить его содержимое.
Используйте символ перенаправления >>, чтобы добавить данные в файл, а не перезаписывать его. Это позволит вам добавлять в файл ключи, не удаляя ранее добавленные ключи.
Команда выглядит так:
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.
Копирование открытого ключа вручную
Если у вас нет парольного доступа, вам придется выполнить описанный выше процесс вручную.
Вручную нужно вставить содержимое файла 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 public_key_string >> ~/.ssh/authorized_keys
Если файла 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 8host:8host ~/.ssh
Теперь можно проверить беспарольную аутентификацию на сервере Ubuntu.
3: Аутентификация по SSH-ключам
Скопировав открытый ключ, вы сможете войти на удаленный хост без пароля учетной записи удаленного пользователя.
Введите:
ssh 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.
Если вы не установили парольную фразу для закрытого ключа, вы сразу же войдете в систему. Если вы создали парольную фразу, вам будет предложено ввести ее сейчас (обратите внимание, что вводимая вами фраза не будет отображаться в терминале из соображений безопасности). После аутентификации в новом сеансе оболочки вы получите доступ к удаленному пользователю.
Если аутентификация по ключам прошла успешно, можно отключить парольную аутентификацию, чтобы повысить безопасность удаленной машины.
4: Отключение парольной аутентификации
Если вы смогли войти в свою учетную запись с помощью SSH-ключей без пароля, нужно отключить механизм парольной аутентификации, чтобы защитить сервер от brute-force атак.
Важно! Прежде чем выполнять этот раздел, убедитесь, что на этом сервере вы настроили аутентификацию на основе SSH-ключей для учетной записи root или для пользователя с привилегиями sudo. Этот раздел заблокирует поддержку паролей для входа в систему, и вы можете случайно заблокировать себя на собственном сервере.
Убедившись, что ваша удаленная учетная запись имеет все необходимые привилегии, зайдите на свой удаленный сервер с помощью SSH-ключей (либо с правами администратора, либо через учетную запись с привилегиями sudo). Затем откройте файл конфигурации демона SSH:
sudo nano /etc/ssh/sshd_config
Внутри файла найдите директиву PasswordAuthentication. Она может быть закомментирована. Раскомментируйте строку и установите значение «no». Это отключит возможность входа в систему через SSH с использованием паролей учетных записей:
...
PasswordAuthentication no
...
Сохраните и закройте файл. Чтобы обновить настройки, необходимо перезапустить сервис sshd:
sudo systemctl restart ssh
В качестве меры предосторожности откройте новое окно терминала и проверьте работу сервиса SSH:
ssh username@remote_host
После того как вы подтвердите работу сервиса SSH, можете закрыть все текущие сеансы сервера.
Демон SSH на сервере Ubuntu теперь поддерживает только аутентификацию по SSH-ключам. Парольная аутентификация успешно отключена.
Заключение
Теперь на вашем сервере настроена аутентификация на основе SSH-ключей, позволяющая войти в систему без пароля учетной записи.
Tags: OpenSSH, RSA, SSH, Ubuntu 18.04, Ubuntu 18.04 LTS