Как настроить ключи SSH в Debian 9

Вступление

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

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

Шаг 1 - Создайте пару ключей RSA

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

ssh-keygen

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

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

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

Нажмите enter, чтобы сохранить пару ключей в подкаталоге + .ssh / + в вашем домашнем каталоге, или укажите альтернативный путь.

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

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

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

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

OutputEnter passphrase (empty for no passphrase):

Здесь вы можете ввести безопасную фразу-пароль, что настоятельно рекомендуется. Парольная фраза добавляет дополнительный уровень безопасности для предотвращения входа неавторизованных пользователей. Чтобы узнать больше о безопасности, обратитесь к нашему руководству на https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-ser[[Как настроить SSH Аутентификация на основе ключей на сервере Linux.

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

OutputYour identification has been saved in //.ssh/id_rsa.
Your public key has been saved in //.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-ключа для входа в систему.

Шаг 2 - Скопируйте открытый ключ на сервер Debian

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

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

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

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

Синтаксис:

ssh-copy-id @

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

OutputThe authenticity of host ' ()' 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, который мы создали ранее. Когда он находит ключ, он запрашивает пароль учетной записи удаленного пользователя:

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

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

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

OutputNumber of key(s) added: 1

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

На этом этапе ваш ключ + id_rsa.pub + был загружен в удаленную учетную запись. Вы можете перейти к https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-9#step-3-%E2%80%94-authenticate- to-debian-server-using-ssh-keys [Шаг 3].

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

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

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

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

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

Полная команда выглядит так:

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

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

OutputThe authenticity of host ' ()' 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» для продолжения.

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

Output@'s password:

После ввода пароля содержимое вашего ключа + id_rsa.pub + будет скопировано в конец файла + authorized_keys + учетной записи удаленного пользователя. Перейдите на https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-9#step-3-%E2%80%94-authenticate-to- debian-server-using-ssh-keys [Шаг 3], если это было успешно.

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

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

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

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

cat ~/.ssh/id_rsa.pub

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

Outputssh-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  >> ~/.ssh/authorized_keys

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

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

chmod -R go= ~/.ssh

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

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

chown -R : ~/.ssh

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

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

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

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

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

ssh @

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

OutputThe authenticity of host ' ()' 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» для продолжения.

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

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

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

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

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

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

sudo nano /etc/ssh/sshd_config

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

/ И т.д. / SSH / sshd_config

...
PasswordAuthentication no
...

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

sudo systemctl restart ssh

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

ssh @

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

Теперь демон SSH на вашем сервере Debian отвечает только на ключи SSH. Проверка подлинности на основе пароля успешно отключена.

Заключение

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

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

Related