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

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

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

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

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

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

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

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

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

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

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

Как создать SSH ключи

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

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

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

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-ключи при попытке аутентификации. Если вы хотите выбрать нестандартный путь, введите его сейчас, в противном случае нажмите клавишу ENTER, чтобы принять значение по умолчанию.

Если вы ранее сгенерировали пару ключей 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: 

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

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

  • Закрытый ключ SSH (часть, которая может быть защищена парольной фразой), никогда не раскрывается в сети. Фраза-пароль используется только для расшифровки ключа на локальном компьютере. Это означает, что перебор пароля будет невозможен.
  • Закрытый ключ хранится в ограниченном каталоге. Клиент SSH не распознает закрытые ключи, которые не хранятся в ограниченных каталогах. Сам ключ также должен иметь ограниченные разрешения (чтение и запись доступны только для владельца). 
  • Любой злоумышленник, надеющийся взломать частную фразу-пароль SSH, должен уже иметь доступ к системе. Это означает, что у них уже будет доступ к вашей учетной записи пользователя или учетной записи root. Если вы находитесь в этом положении, фраза-пароль может помешать атакующему немедленно войти на другие ваши серверы. Надеемся, что это даст вам время для создания и реализации новой пары ключей SSH и удаления доступа из скомпрометированного ключа.

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

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

Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
|     ..o         |
|   E o= .        |
|    o. o         |
|        ..       |
|      ..S        |
|     o o.        |
|   =o.+.         |
|. =++..          |
|o=++.            |
+-----------------+

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

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

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

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

Если вы уже добавили файл открытого ключа в свою учетную запись, вы увидите его здесь как вариант выбора (в приведенном выше примере есть два существующих ключа: «Рабочий ключ» и «Домашний ключ»). Чтобы вставить существующий ключ, просто нажмите на него, и он будет выделен. Вы можете встроить несколько ключей на одном сервере.

Если у вас еще нет открытого ключа SSH, загруженного в вашу учетную запись, или если вы хотите добавить новый ключ в свою учетную запись, нажмите кнопку «+ Добавить ключ SSH». 

В поле «Содержимое ключа SSH» вставьте содержимое вашего открытого ключа SSH. Предполагая, что вы сгенерировали ключи с помощью описанного выше метода, вы можете получить содержимое открытого ключа на локальном компьютере, набрав:

cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNqqi1mHLnryb1FdbePrSZQdmXRZxGZbo0gTfglysq6KMNUNY2VhzmYN9JYW39yNtjhVxqfW6ewc+eHiL+IRRM1P5ecDAaL3V0ou6ecSurU+t9DR4114mzNJ5SqNxMgiJzbXdhR+j55GjfXdk0FyzxM3a5qpVcGZEXiAzGzhHytUV51+YGnuLGaZ37nebh3UlYC+KJev4MYIVww0tWmY+9GniRSQlgLLUQZ+FcBUjaqhwqVqsHe4F/woW1IHe7mfm63GXyBavVc+llrEzRbMO111MogZUcoWDI9w7UIm8ZOTnhJsk7jhJzG2GpSXZHmly/a/buFaaFnmfZ4MYPkgJD username@example.com

Вставьте это значение полностью в большую рамку. В поле «Комментарий (необязательно)» вы можете выбрать метку для ключа. 

Когда вы создаете Droplet, выбранные вами открытые SSH-ключи будут помещены в ~/.ssh/authorized_keysфайл учетной записи пользователя root. Это позволит вам войти на сервер с компьютера с помощью вашего закрытого ключа.

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

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

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

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

Самый простой способ скопировать ваш открытый ключ на существующий сервер — использовать утилиту под названием ssh-copy-id. Из-за своей простоты этот метод рекомендуется, если он доступен.

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

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

Синтаксис:

ssh-copy-id username@remote_host

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

The authenticity of host '111.111.11.111 (111.111.11.111)' 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

Это просто означает, что ваш локальный компьютер не распознает удаленный хост. Это произойдет при первом подключении к новому хосту. Введите «да» и нажмите клавишу 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@111.111.11.111'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@111.111.11.111'"
and check to make sure that only the key(s) you wanted were added.

На данный момент ваш id_rsa.pubключ был загружен в удаленную учетную запись. Вы можете перейти к следующему разделу.

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

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

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

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

Полная команда будет выглядеть так:

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

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

The authenticity of host '111.111.11.111 (111.111.11.111)' 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

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

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

username@111.111.11.111's password:

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

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

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

Содержимое вашего id_rsa.pubфайла должно быть ~/.ssh/authorized_keysкаким-то образом добавлено в файл на удаленной машине.

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

cat ~/.ssh/id_rsa.pub

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

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Получите доступ к удаленному хосту любым доступным вам способом. Например, вы можете войти в систему с помощью веб-консоли на панели управления.

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

mkdir -p ~/.ssh

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

echo public_key_string >> ~/.ssh/authorized_keys

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

Если это работает, вы можете перейти к аутентификации без пароля.

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

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

Основной процесс такой же:

ssh username@remote_host

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

The authenticity of host '111.111.11.111 (111.111.11.111)' 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

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

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

В случае успеха продолжайте, чтобы узнать, как заблокировать сервер.

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

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

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

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

sudo nano /etc/ssh/sshd_config

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

PasswordAuthentication no

Сохраните и закройте файл, когда вы закончите. Чтобы на самом деле реализовать изменения, которые мы только что сделали, вы должны перезапустить службу.

На машинах с Ubuntu или Debian вы можете выполнить эту команду:

sudo service ssh restart

На машинах CentOS / Fedora демон называется sshd:

sudo service sshd restart

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

Вывод

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

By Justin Ellingwood

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *