Поиск по сайту:

Как настроить аутентификацию на основе ключа SSH на сервере FreeBSD


Введение

SSH или безопасная оболочка — это сетевой протокол, обеспечивающий безопасный зашифрованный способ связи с вашими серверами и их администрирования. Поскольку SSH является наиболее распространенным способом работы с сервером FreeBSD, вам следует ознакомиться с различными способами аутентификации и входа на сервер. Хотя существует несколько способов входа на сервер FreeBSD, в этом руководстве основное внимание будет уделено настройке и использованию ключей SSH для аутентификации.

Примечание. С 1 июля 2022 г. DigitalOcean больше не поддерживает создание новых капель FreeBSD через панель управления или API. Однако вы по-прежнему можете запускать капли FreeBSD, используя собственный образ. Узнайте, как импортировать собственное изображение в DigitalOcean, следуя нашей документации по продукту.

Как работают SSH-ключи

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

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

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

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

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

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

Как создать пару ключей SSH

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

Чтобы сгенерировать пару ключей SSH, вы можете использовать утилиту ssh-keygen. По умолчанию создается 2048-битная пара ключей RSA, которая подходит для большинства случаев.

В терминале вашего локального компьютера сгенерируйте пару ключей с помощью этой команды:

ssh-keygen

Вы увидите вывод, подобный следующему:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):

При появлении запроса вы можете принять расположение ключа по умолчанию или ввести другой путь. Если вы примете значение по умолчанию, ключи будут храниться в каталоге .ssh в домашнем каталоге вашего пользователя. Закрытый ключ будет называться id_rsa, а открытый ключ будет называться id_rsa.pub.

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

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

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

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

На этом этапе вы должны увидеть приглашение ввести парольную фразу:

Created directory '/home/username/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again: 

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

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

Your identification has been saved in /home/sammy/.ssh/id_rsa.
Your public key has been saved in /home/sammy/.ssh/id_rsa.pub.
The key fingerprint is:
76:e2:bc:19:18:b3:35:59:f4:54:b9:d3:bc:d0:56:a1 username@localcomputer
The key's randomart image is:
+--[ RSA 2048]----+
|          . ...o.|
|         . o  o .|
|          . .E.+.|
|         o   .ooo|
|      o S .   o..|
|       X +     . |
|      o +        |
|         +       |
|        o        |
+-----------------+

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

Как скопировать открытый ключ на свой сервер

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

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

Копирование вашего открытого ключа с помощью SSH-Copy-ID

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

Чтобы проверить, есть ли инструмент на вашем локальном компьютере, просто попробуйте запустить ssh-copy-id из командной строки. Если она недоступна, вы получите сообщение об ошибке «команда не найдена». Если у вас нет этой утилиты, вы можете попробовать установить ее или воспользоваться одним из других способов, описанных в следующих подразделах.

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

ssh-copy-id username@remote_host

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

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)? yes

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

Утилита просканирует вашу локальную учетную запись пользователя на предмет открытого ключа, который вы создали ранее, 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@111.222.11.222's password:

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

Если копирование прошло успешно, вы увидите такой вывод:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'username@111.222.11.222'"
and check to make sure that only the key(s) you wanted were added.

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

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

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

Если у вас нет ssh-copy-id на вашем локальном компьютере, но у вас есть SSH-доступ к вашему серверу на основе пароля, вы можете установить свой открытый ключ с помощью SSH-клиента.

Этот метод работает путем вывода открытого ключа SSH на локальный компьютер и передачи его через SSH на удаляемый сервер. На удаленном сервере мы выполняем пару команд для создания каталога ~/.ssh, если он еще не существует, а затем добавляем открытый ключ в файл с именем authorized_keys в каталог. Мы будем использовать перенаправление >> для добавления ключа в файл authorized_keys, если он уже существует, в случае, если какие-либо общедоступные ключи SSH уже установлены в учетной записи удаленного пользователя ( поэтому они не будут перезаписаны и удалены как авторизованные ключи).

Предполагая, что ваш открытый ключ имеет имя по умолчанию, id_rsa.pub, вот команда для установки открытого ключа SSH (замените удаленного пользователя и хост):

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

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

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)? yes

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

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

username@111.222.11.222's password:

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

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

Копирование открытого ключа вручную

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

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

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

ssh username@remote_host

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

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)? yes

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

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

Password for username@111.222.11.222:

Теперь вы должны создать каталог .ssh в домашнем каталоге удаленного пользователя, если он еще не существует. Эта команда сделает именно это:

mkdir -p ~/.ssh

На локальном компьютере введите эту команду в терминал, чтобы распечатать открытый SSH-ключ:

cat ~/.ssh/id_rsa.pub

Скопируйте вывод в буфер обмена, затем откройте файл authorized_keys в текстовом редакторе по вашему выбору. Здесь мы будем использовать ee:

ee ~/.ssh/authorized_keys

Вставьте свой открытый ключ в файл authorized_keys, затем сохраните и выйдите. Если вы используете ee, сохраните и выйдите, нажав ESC, затем a, а затем снова a.

Ваш открытый SSH-ключ теперь установлен на удаленном сервере. Перейдите к следующему разделу, чтобы войти на сервер с помощью ключей SSH.

Аутентификация на вашем сервере с использованием ключей SSH

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

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

ssh username@remote_host

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

Если вы вошли на свой сервер, это означает, что ключ SSH был успешно установлен.

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

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

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

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

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

sudo ee /etc/ssh/sshd_config

В файле найдите директиву с именем ChallengeResponseAuthentication. Его можно закомментировать. Раскомментируйте строку, удалив символ #, затем установите значение \no. Это должно выглядеть так, когда вы закончите:

ChallengeResponseAuthentication no

Сохраните и закройте файл. Если вы используете ee, сохраните и выйдите, нажав ESC, затем a, а затем снова a.

Чтобы изменения вступили в силу, необходимо перезапустить службу sshd. Чтобы перезапустить демон SSH во FreeBSD, используйте эту команду:

sudo service sshd restart

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

Заключение

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