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

Введение

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

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

Шаг 1 — Создание пары ключей RSA

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

  1. ssh-keygen

По умолчанию ssh-keygen создаст пару ключей RSA с длиной 3072 бит, что достаточно безопасно для большинства случаев использования (вы можете дополнительно указать флаг -b 4096 для создания более крупного ключа с длиной 4096 бит).

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

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

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

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

Output
Enter passphrase (empty for no passphrase):

Здесь вы можете ввести безопасную фразу, что настоятельно рекомендуется. Фраза добавляет дополнительный уровень безопасности, чтобы предотвратить попытки несанкционированного входа. Для получения дополнительной информации о безопасности обратитесь к нашему руководству по Настройке аутентификации на основе ключей SSH на сервере Linux.

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

Output
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 — Копирование публичного ключа на сервер Debian

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

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

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

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

Синтаксис следующий:

  1. ssh-copy-id username@remote_host

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

Output
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, который мы создали ранее. Когда она найдет ключ, она попросит вас ввести пароль учетной записи удаленного пользователя:

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 username@203.0.113.1's password:

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

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

Output
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.

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

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

Затем мы можем вывести содержимое, которое мы направили, в файл с именем authorized_keys в этом каталоге. Мы будем использовать символ перенаправления >>, чтобы добавить содержимое, а не перезаписать его. Это позволит нам добавлять ключи, не уничтожая ранее добавленные ключи.

Полная команда выглядит следующим образом:

  1. cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

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

Output
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, чтобы продолжить.

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

Output
username@203.0.113.1's password:

После ввода пароля содержимое вашего ключа id_rsa.pub будет скопировано в конец файла authorized_keys учетной записи удаленного пользователя. Продолжайте до Шаг 3, если это было успешно.

Копирование общего ключа вручную

Если у вас нет доступа к серверу по SSH на основе пароля, вам придется выполнить вышеуказанный процесс вручную.

Мы вручную добавим содержимое вашего файла id_rsa.pub в файл ~/.ssh/authorized_keys на вашем удаленном компьютере.

Чтобы отобразить содержимое вашего ключа id_rsa.pub, введите это на своем локальном компьютере:

  1. cat ~/.ssh/id_rsa.pub

Вы увидите содержимое ключа, которое должно выглядеть примерно так:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test

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

Как только у вас будет доступ к вашей учетной записи на удаленном сервере, убедитесь, что каталог ~/.ssh существует. Эта команда создаст каталог при необходимости или ничего не сделает, если он уже существует:

  1. mkdir -p ~/.ssh

Теперь вы можете создать или изменить файл authorized_keys в этом каталоге. Вы можете добавить содержимое вашего файла id_rsa.pub в конец файла authorized_keys, создав его при необходимости, используя эту команду:

  1. echo public_key_string >> ~/.ssh/authorized_keys

В вышеприведенной команде замените public_key_string выводом команды cat ~/.ssh/id_rsa.pub, которую вы выполнили на вашей локальной системе. Он должен начинаться с ssh-rsa AAAA....

Наконец, мы убедимся, что для каталога ~/.ssh/ и файла authorized_keys установлены соответствующие разрешения:

  1. chmod -R go= ~/.ssh

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

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

  1. chown -R sammy:sammy ~/.ssh

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

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

Шаг 3 — Аутентификация на сервере Debian с использованием SSH-ключей

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

Общий процесс такой же:

  1. ssh username@remote_host

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

Output
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, чтобы продолжить.

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

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

Шаг 4 — Отключение аутентификации по паролю на вашем сервере

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

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

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

  1. sudo nano /etc/ssh/sshd_config

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

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

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

  1. sudo systemctl restart ssh

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

  1. ssh username@remote_host

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

Демон SSH на вашем сервере Debian теперь отвечает только на SSH-ключи. Аутентификация на основе пароля успешно отключена.

Заключение

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

Если вы хотите узнать больше о работе с SSH, ознакомьтесь с нашим Руководством по основам SSH.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-11