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

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

В этом руководстве мы настроим ключи SSH на свежем сервере Debian. 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/ в домашнем каталоге (при желании укажите другой каталог).

Если ранее вы уже создали пару ключей, на экране может появиться такой запрос:

/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:5E2BtTN9FHPBNoRXAB/EdjtHNYOHzTBzG5qUv7S3hyM root@debian-suricata
The key's randomart image is:
+---[RSA 3072]----+
|         oo .O^XB|
|        .  +.BO%B|
|        . = .+B+o|
|       o o o . =.|
|        S .   . =|
|               o.|
|               .o|
|            E o..|
|             . ..|
+----[SHA256]-----+

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

2: Копирование открытого ключа на удаленный сервер

Проще всего скопировать открытый ключ на удаленный сервер при помощи утилиты ssh-copy-id.

Если на вашем сервере утилита ssh-copy-id не установлена, вы можете скопировать ключ одним из двух других методов –через парольную аутентификацию SSH или вручную (об этом мы поговорим ниже).

Копирование ключа с помощью ssh-copy-id

Утилита ssh-copy-id установлена в большинстве операционных систем по умолчанию, поэтому, скорее всего, она есть и у вас. Чтобы эта команда работала, вам нужен парольный SSH-доступ к вашему серверу.

Команде ssh-copy-id нужно передать удаленный хост, к которому вы хотите подключиться, и задать пользователя, к которому у вас есть 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 в его файл ~/.ssh/authorized_keys.

Вы увидите:

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 существует в учетной записи удаленного пользователя, и проверим содержимое файла 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-copy-id, вам придется выполнить весь процесс вручную: самостоятельно скопировать и вставить содержимое файла id_rsa.pub в файл ~/.ssh/authorized_keys на удаленном сервере.

Выведите на экран локального компьютера содержимое id_rsa.pub с помощью команды:

cat ~/.ssh/id_rsa.pub

Вы увидите ключ:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= 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

Пора протестировать работу беспарольной аутентификации на сервере.

3: Аутентификация по SSH-ключам на сервере Rocky Linux

Когда открытый ключ скопирован на удаленный сервер, вы сможете залогиниться, не указывая пароля удаленного пользователя.

Введите эту команду:

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-ключей (как root либо как sudo). Затем откройте конфиг демона SSH:

sudo nano /etc/ssh/sshd_config

Найдите директиву PasswordAuthentication. Она может быть закомментирована. Если это так, раскомментируйте эту строку и присвойте ей значение «no». Так вы отключите возможность входа в систему по паролю:

. . .
PasswordAuthentication no
. . .

Сохраните и закройте файл. Перезапустите sshd, чтобы обновить настройки:

sudo systemctl restart ssh

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

ssh username@remote_host

Теперь, когда вы уверены, что сервис SSH работает правильно, вы можете закрыть все текущие сессии.

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

Заключение

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

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

Tags: , ,

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