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

Вступление

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

Как работают ключи 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:

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

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

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 для входа в систему.

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

На панели управления DigitalOcean в процессе создания капли вы можете добавить один или несколько открытых ключей SSH к создаваемой капле. Для капли FreeBSD этот открытый ключ SSH будет установлен на пользователя + freebsd +, который имеет привилегии суперпользователя.

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

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

cat ~/.ssh/id_rsa.pub

Теперь запустите процесс создания капли через панель управления DigitalOcean. Назовите дроплет и делайте желаемый выбор, пока не дойдете до раздела * Добавить ключи SSH (необязательно) * непосредственно перед кнопкой «Создать дроплет».

изображение: https: //assets.digitalocean.com/site/ControlPanel/cp_create_add_ssh_key.png [Добавить ключи SSH]

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

В поле * SSH Key content * вставьте содержимое вашего открытого SSH-ключа (скопируйте его из своего терминала и вставьте в него). Вы также можете пометить свой ключ SSH, используя поле * Комментарий (необязательно) *. Это будет выглядеть примерно так:

изображение: https: //assets.digitalocean.com/site/ControlPanel/cp_create_add_ssh_key_content.png [Добавить содержимое ключа SSH]

Теперь нажмите зеленую кнопку * Добавить ключ SSH *, чтобы добавить открытый ключ SSH в свою учетную запись DigitalOcean. Недавно добавленный SSH будет выбран автоматически (выделен синим цветом), что означает, что он будет добавлен в новую каплю. Это должно выглядеть так:

изображение: https: //assets.digitalocean.com/site/ControlPanel/cp_create_key.png [Выбрать ключ SSH]

Теперь завершите процесс создания капли, нажав кнопку * Создать каплю *.

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

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

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

Если у вас уже есть сервер 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 @

Вы можете увидеть сообщение, подобное этому:

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

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

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

Если копия выполнена успешно, вы увидите вывод, подобный этому

Number of key(s) added: 1

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

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

Перейдите к разделу Authenticate to your Server с использованием ключей SSH, чтобы войти на сервер с помощью ключей SSH.

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

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

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

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

cat ~/.ssh/id_rsa.pub | ssh @ "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)?

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

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

[email protected]'s password:

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

Перейдите к разделу Authenticate to your Server с использованием ключей SSH, чтобы войти на сервер с помощью ключей SSH.

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

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

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

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

ssh @

Вы можете увидеть сообщение, подобное этому:

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

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

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

Password for [email protected]:

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

mkdir -p ~/.ssh

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

cat ~/.ssh/id_rsa.pub

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

ee ~/.ssh/authorized_keys

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

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

Выполните аутентификацию на вашем сервере с помощью ключей SSH

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

Попытайтесь войти на удаленный сервер, используя SSH:

ssh @

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

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

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

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

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

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

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

sudo ee /etc/ssh/sshd_config

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

ChallengeResponseAuthentication no

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

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

sudo service sshd restart

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

Заключение

Теперь у вас должна быть запущена и запущена аутентификация на основе ключей SSH на вашем сервере FreeBSD, что позволяет вам входить в систему без предоставления пароля пользователя. Здесь вы можете прочитать больше о защите вашего сервера FreeBSD. Если вы хотите узнать больше о работе с SSH, взгляните на наш https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys [ Руководство по основам SSH.

Related