SSH, или secure shell – это зашифрованный протокол, используемый для безопасного подключения к серверу и управления ним. При работе с сервером Debian, вы, скорее всего, проведете большую часть времени в терминале, подключенном к серверу через SSH.
SSH-ключи – это простой и безопасный способ входа на сервер, их рекомендуется использовать для всех учетных записей. В этом мануале вы узнаете, как настроить ключи SSH на свежем сервере Ubuntu 20.04.
1: Создание пары ключей
Для начала нужно создать пару ключей на клиентской машине (как правило, это ваш компьютер):
ssh-keygen
По умолчанию команда ssh-keygen создает пару 3072-битных 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/ в домашнем каталоге, при желании укажите другой путь.
Если вы сгенерировали пару ключей ранее, может появиться такой запрос:
/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:
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 ключ.
Утилита использует такой синтаксис:
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.
Копирование открытого ключа вручную
Если у вас нет парольного доступа и утилиты ssh-copy-id, вам придется выполнить весь процесс вручную: вручную вставить содержимое файла 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 в конец файла с помощью команды:
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-ключей вы можете войти в систему без пароля вашего пользователя.
Читайте также: