Введение
SSH, или secure shell, является зашифрованным протоколом, используемым для администрирования и обмена данными с серверами. Когда вы работаете с сервером Debian, вероятно, большую часть времени вы будете проводить в сеансе терминала, подключенном к вашему серверу через SSH.
В этом руководстве мы сосредоточимся на настройке SSH-ключей для чистой установки Debian 11. SSH-ключи обеспечивают простой и безопасный способ входа на сервер и рекомендуются для всех пользователей.
Шаг 1 — Создание пары ключей RSA
Первый шаг – создать пару ключей на клиентской машине (обычно на вашем компьютере):
По умолчанию ssh-keygen
создаст пару ключей RSA с длиной 3072 бит, что достаточно безопасно для большинства случаев использования (вы можете дополнительно указать флаг -b 4096
для создания более крупного ключа с длиной 4096 бит).
После ввода команды вы должны увидеть следующий вывод:
OutputGenerating 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)?
Предупреждение: Если вы решите перезаписать ключ на диске, вы больше не сможете аутентифицироваться с использованием предыдущего ключа. Будьте очень осторожны при выборе “да”, поскольку это разрушительный процесс, который нельзя отменить.
Затем вы должны увидеть следующий запрос:
OutputEnter passphrase (empty for no passphrase):
Здесь вы можете ввести безопасную фразу, что настоятельно рекомендуется. Фраза добавляет дополнительный уровень безопасности, чтобы предотвратить попытки несанкционированного входа. Для получения дополнительной информации о безопасности обратитесь к нашему руководству по Настройке аутентификации на основе ключей SSH на сервере Linux.
Затем вы увидите следующий вывод:
OutputYour 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.
Синтаксис следующий:
Вы можете увидеть следующее сообщение:
OutputThe 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
.
Вы должны увидеть следующий вывод:
OutputNumber 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
в этом каталоге. Мы будем использовать символ перенаправления >>
, чтобы добавить содержимое, а не перезаписать его. Это позволит нам добавлять ключи, не уничтожая ранее добавленные ключи.
Полная команда выглядит следующим образом:
Вы можете увидеть следующее сообщение:
OutputThe 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
, чтобы продолжить.
После этого вам будет предложено ввести пароль учетной записи удаленного пользователя:
Outputusername@203.0.113.1's password:
После ввода пароля содержимое вашего ключа id_rsa.pub
будет скопировано в конец файла authorized_keys
учетной записи удаленного пользователя. Продолжайте до Шаг 3, если это было успешно.
Копирование общего ключа вручную
Если у вас нет доступа к серверу по SSH на основе пароля, вам придется выполнить вышеуказанный процесс вручную.
Мы вручную добавим содержимое вашего файла id_rsa.pub
в файл ~/.ssh/authorized_keys
на вашем удаленном компьютере.
Чтобы отобразить содержимое вашего ключа id_rsa.pub
, введите это на своем локальном компьютере:
Вы увидите содержимое ключа, которое должно выглядеть примерно так:
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test
Получите доступ к вашему удаленному хосту, используя любой доступный метод.
Как только у вас будет доступ к вашей учетной записи на удаленном сервере, убедитесь, что каталог ~/.ssh
существует. Эта команда создаст каталог при необходимости или ничего не сделает, если он уже существует:
Теперь вы можете создать или изменить файл authorized_keys
в этом каталоге. Вы можете добавить содержимое вашего файла id_rsa.pub
в конец файла authorized_keys
, создав его при необходимости, используя эту команду:
В вышеприведенной команде замените public_key_string
выводом команды cat ~/.ssh/id_rsa.pub
, которую вы выполнили на вашей локальной системе. Он должен начинаться с ssh-rsa AAAA...
.
Наконец, мы убедимся, что для каталога ~/.ssh/
и файла authorized_keys
установлены соответствующие разрешения:
Это рекурсивно удаляет все разрешения для “группы” и “других” для каталога ~/.ssh/
.
Если вы используете учетную запись root
для настройки ключей для учетной записи пользователя, также важно, чтобы каталог ~/.ssh
принадлежал пользователю, а не root
:
В этом руководстве наш пользователь называется sammy, но вы должны заменить соответствующее имя пользователя в вышеуказанной команде.
Теперь вы можете попробовать аутентифицироваться без пароля на вашем сервере Debian.
Шаг 3 — Аутентификация на сервере Debian с использованием SSH-ключей
Если вы успешно выполнили одну из приведенных выше процедур, вы должны иметь возможность войти на удаленный хост без пароля удаленной учетной записи.
Общий процесс такой же:
Если это ваш первый раз подключения к этому хосту (если вы использовали последний вышеуказанный метод), вы можете увидеть что-то вроде этого:
OutputThe 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:
Внутри файла найдите директиву с названием PasswordAuthentication
. Она может быть закомментирована. Раскомментируйте строку и установите значение “no”. Это отключит возможность входа по SSH с использованием паролей учетных записей:
...
PasswordAuthentication no
...
Сохраните и закройте файл, когда закончите, нажав CTRL
+ X
, затем Y
для подтверждения сохранения файла, и наконец, ENTER
, чтобы выйти из nano. Чтобы фактически внести эти изменения, нам нужно перезапустить службу sshd
:
Как мера предосторожности, откройте новое окно терминала и проверьте, что служба SSH функционирует корректно, прежде чем закрыть эту сессию:
После того как вы проверили свою службу SSH, вы можете безопасно закрыть все текущие сеансы на сервере.
Демон SSH на вашем сервере Debian теперь отвечает только на SSH-ключи. Аутентификация на основе пароля успешно отключена.
Заключение
Теперь у вас должна быть настроена аутентификация на основе SSH-ключей на вашем сервере, что позволяет вам входить без указания пароля учетной записи.
Если вы хотите узнать больше о работе с SSH, ознакомьтесь с нашим Руководством по основам SSH.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-11