Установка SSH-ключей в Debian 10     

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

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

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

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

Теперь можно проверить, как работает беспарольная аутентификация на сервере Debian.

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 на сервере Debian поддерживает только аутентификацию по SSH-ключам. Парольная аутентификация успешно отключена.

Заключение

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

Читайте также:

Tags: , , ,

Добавить комментарий