SSH на сервере Linux
SSH, также известный как secure shell, представляет собой протокол, который можно использовать для подключения и связи с сервером. Вы можете подключиться к своему серверу Linux для сеанса терминала с использованием этого зашифрованного протокола. Если вы используете сервер OpenSSH, существует в основном два различных способа прохождения процесса аутентификации. Первый — это стандартная аутентификация по паролю. Здесь вы просто используете свои имя пользователя и пароль для получения доступа к своей учетной записи. Другой способ — настроить сервер Linux для аутентификации на основе ключей SSH.
В этом руководстве мы сосредоточимся на том, как настроить сервер Linux для использования ключей SSH в качестве основного средства аутентификации. Мы также обсудим, почему ключи SSH часто предпочитают обычному механизму защиты паролем.
Что такое ключи SSH?
Ключи SSH аналогичны учетным данным, которые вы используете для входа в свою учетную запись на сервере. Вместо ввода имени пользователя и пароля вы используете пару ключей SSH, которая также является учетными данными для доступа. Хотя ключи являются криптографическими, вы должны относиться к ним как к учетным данным для аутентификации, поскольку именно этой цели они и служат.
Типичный ключ SSH состоит из двух частей: авторизованного ключа и ключа идентификации. Авторизованный ключ — это публичный ключ, который работает в сочетании с вашим приватным ключом идентификации для предоставления доступа к учетной записи. Публичный ключ находится на удаленном сервере, на который вы хотите войти по SSH, и хранится в файле ~/.ssh/authorized_keys, связанном с вашей учетной записью пользователя. Ключи идентификации служат для подтверждения вашей личности как надлежащего пользователя, чтобы гарантировать, что только авторизованный персонал может получить доступ к данной учетной записи. В совокупности эти ключи называются пользовательскими ключами, поскольку они аутентифицируют личность пользователя. Как только сервер сможет проверить оба ключа, инициируется сеанс оболочки для выполнения ваших команд.
У вас также есть ключи хоста и сеансовые ключи. Протокол аутентифицирует локальный компьютер, систему или сервер с помощью ключа хоста. Сеансовые ключи помогают шифровать поток данных по соединению. Это делает ваш сеанс и соответствующую деятельность гораздо более безопасными и защищенными.
Преимущества ключей SSH перед защитой паролем
Основная причина, по которой аутентификация на основе ключей SSH предпочтительнее защиты паролем, заключается в том, что последняя может сделать вас уязвимыми для кибератак. Большинство людей не используют чрезвычайно сложные пароли, чтобы иметь возможность запомнить их при входе в систему. В результате это создает уязвимость. Многие злоумышленники используют метод подбора, чтобы взломать относительно простой пароль и проникнуть в учетную запись. В наши дни это стало особенно легко благодаря автоматизации и передовым технологиям хакинга.
Ключи SSH, с другой стороны, предлагают гораздо более безопасный способ получения доступа к вашей учетной записи. Как мы упоминали ранее, этот метод использует публичный и приватный ключи для аутентификации личности клиента. Хотя вы можете поделиться публичным ключом с кем угодно, приватный ключ необходимо держать в секрете. При совместном использовании публичный ключ расшифровывает приватный для подтверждения вашей личности. Кроме того, вы можете усилить защиту, добавив кодовую фразу поверх пары ключей. Мы подробнее поговорим о кодовой фразе далее в руководстве. Однако даже без кодовой фразы ваш приватный ключ SSH хранится в чрезвычайной безопасности на вашем локальном компьютере. Сеть никогда не сможет получить прямой доступ к ключу, который находится в защищенной директории и наделен ограниченными правами доступа.
Генерация ключей SSH
Чтобы сгенерировать пару ключей SSH, вам нужно обратиться к набору инструментов OpenSSH и найти ssh-keygen. Это специальная утилита, которая позволяет сгенерировать пару ключей SSH размером около 2048 бит. Начните с запуска этой команды:
|
1 |
ssh-keygen |
При этом появится следующее сообщение:
|
1 2 |
Генерация публичный/приватный rsa ключ пара. Введите файл в который чтобы сохранить этот ключ (/home/username/.ssh/id_rsa): |
В результате будет создан закрытый ключ с именем id_rsa и открытый ключ с именем id_rsa.pub. На этом этапе вы можете выбрать, где сохранить ключ. Мы рекомендуем оставить расположение по умолчанию, нажав Enter. Использование расположения по умолчанию гарантирует, что сервер автоматически найдет и проверит ключи при каждом входе в систему. Расположение по умолчанию — это каталог ~/.ssh в домашнем каталоге. Если вы предпочитаете выбрать другое место, введите путь к нему.
Перезапись старых SSH-ключей
Важно отметить, что в системе одновременно может быть только одна пара SSH-ключей. Это означает, что если вы ранее создавали и сохраняли пару ключей в системе, вы увидите следующее сообщение:
|
1 2 |
/home/username/.ssh/id_rsa уже существует. Перезаписать (y/n)? |
Чтобы продолжить создание и сохранение новой пары SSH-ключей, необходимо удалить существующую. Помните: если вы перезапишете ключ, уже сохраненный на диске, вы больше не сможете использовать его для аутентификации. Это необратимый процесс, поэтому убедитесь, что вы абсолютно уверены в том, что хотите перезаписать старую пару ключей.
Установка парольной фразы
После того как вы настроите ключи в каталоге, вам будет предложено ввести парольную фразу:
|
1 2 3 |
Создан каталог '/home/username/.ssh'. Введите парольную фразу (пусто для без парольной фразы): Введите ту же парольную фразу снова: |
Парольная фраза необязательна — вы можете пропустить этот шаг. Однако она обеспечивает дополнительный уровень безопасности для вашего закрытого ключа, шифруя его на диске. Если вы решите использовать парольную фразу, вам придется вводить ее правильно каждый раз при попытке входа в систему с использованием этой пары SSH-ключей:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Ваш идентификатор был успешно сохранен в /home/username/.ssh/id_rsa. Ваш открытый ключ был успешно сохранен в /home/username/.ssh/id_rsa.pub. The ключ отпечаток —: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The ключ's randomart изображение —: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+ |
Наконец, теперь у вас должны быть SSH-ключи, которые вы можете использовать для аутентификации клиента.
Добавление вашего SSH-ключа в учетную запись сервера
Прежде чем использовать ключи для аутентификации, вам необходимо добавить открытый ключ на удаленный сервер Linux. Далее мы покажем, как это сделать при создании сервера CloudSigma. Сначала вам нужно найти свой открытый SSH-ключ, чтобы скопировать и вставить его. Если вы использовали описанный выше метод для генерации пары SSH-ключей, вы можете найти открытый ключ, введя следующее:
|
1 |
cat ~/.ssh/id_rsa.pub |
В результате открытый SSH-ключ отобразится следующим образом:
|
1 |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNqqi1mHLnryb1FdbePrSZQdmXRZxGZbo0gTfglysq6KMNUNY2VhzmYN9JYW39yNtjhVxqfW6ewc+eHiL+IRRM1P5ecDAaL3V0ou6ecSurU+t9DR4114mzNJ5SqNxMgiJzbXdhR+j55GjfXdk0FyzxM3a5qpVcGZEXiAzGzhHytUV51+YGnuLGaZ37nebh3UlYC+KJev4MYIVww0tWmY+9GniRSQlgLLUQZ+FcBUjaqhwqVqsHe4F/woW1IHe7mfm63GXyBavVc+llrEzRbMO111MogZUcoWDI9w7UIm8ZOTnhJsk7jhJzG2GpSXZHmly/a/buFaaFnmfZ4MYPkgJD username@example.com |
Скопируйте это значение, чтобы использовать его позже. При создании сервера в CloudSigma у вас есть возможность добавить SSH-ключ после выбора размера сервера и образа ОС:

Нажмите «Добавить» (Add) и вставьте скопированное значение, чтобы внедрить SSH-ключ в ваш сервер. В результате при каждой загрузке сервера в него уже будет встроен этот SSH-ключ.
Копирование публичного ключа на существующий сервер
Хотя описанный выше метод работает при создании нового сервера, можно ли внедрить SSH-ключ в уже существующий сервер? Ответ — да, и есть несколько способов сделать это в зависимости от того, какие инструменты есть в вашем распоряжении.
Использование SSH-Copy-ID
Это самый простой и легкий способ скопировать публичный ключ. Все, что вам нужно, — это утилита ssh-copy-id, которую вы найдете в стандартном пакете OpenSSH. Но прежде чем использовать этот метод, убедитесь, что на вашем сервере активирована аутентификация по паролю. Чтобы скопировать ключ, примените синтаксис ssh-copy-id, а затем укажите удаленный хост, к которому вы хотите подключиться. Вам также нужно будет указать учетную запись, к которой вы подключаетесь. У вас должен быть доступ к учетной записи по паролю, чтобы ваш ключ был скопирован в нужное место. Команда должна выглядеть следующим образом:
|
1 |
ssh-copy-id username@remote_host |
Это может привести к появлению на вашем экране сообщения следующего вида:
|
1 2 3 |
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 |
Обычно это происходит при первом подключении к конкретному удаленному хосту. Это просто означает, что компьютер не смог распознать хост. Все, что вам нужно сделать, это ввести «yes» и нажать Enter. Как только вы это сделаете, утилита просканирует учетную запись на наличие вашего публичного ключа. Обнаружив его, она попросит вас ввести пароль от вашей учетной записи:
|
1 2 3 |
/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: |
Затем вы можете ввести свой пароль. После подключения к вашей учетной записи утилита скопирует содержимое ключа ~/.ssh/id_rsa.pub и вставит его в файл authorized_keys в каталоге ~/.ssh вашей удаленной учетной записи. После этого вы увидите следующее сообщение:
|
1 2 3 |
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. |
Это означает, что вы успешно скопировали свой публичный ключ на существующий удаленный сервер.
Использование SSH
Это довольно традиционный способ копирования публичного ключа на сервер. Его предпочтительно использовать, если у вас нет доступа к утилите ssh-copy-id. Опять же, вам необходим доступ к вашей учетной записи по паролю. По сути, вы выводите содержимое публичного ключа на своем компьютере и передаете его на удаленный сервер через установленное между ними SSH-соединение. Команда для этой цели должна выглядеть следующим образом:
|
1 |
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" |
Как видите, мы указали, что ключ должен быть помещен в файл authorized_keys в директории ~/.ssh на сервере. Использование символа >> также гарантирует, что мы добавляем ключи, а не перезаписываем их. После запуска команды вы можете увидеть следующее сообщение:
|
1 2 3 |
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 |
Как и в случае с предыдущим сообщением, это означает, что компьютер не распознал удаленный хост. Введите «yes» и нажмите Enter, чтобы продолжить. Теперь вам нужно будет ввести пароль учетной записи:
|
1 |
username@111.111.11.111's password: |
После проверки пароля ключ будет скопирован в файл в вашей учетной записи пользователя, как указано.
Вручную
Если у вас нет доступа по паролю к вашей учетной записи на удаленном сервере, вы можете скопировать публичный ключ вручную. Цель состоит в том, чтобы перенести значение из файла id_rsa.pub в файл ~/.ssh/authorized_keys на вашем удаленном устройстве. Как мы уже знаем, мы можем просмотреть значение ключа id_rsa.pub с помощью следующей команды:
|
1 |
cat ~/.ssh/id_rsa.pub |
Содержимое вашего публичного ключа SSH будет выглядеть следующим образом:
|
1 |
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 существует. Если нет, вы можете запустить следующую команду для ее создания:
|
1 |
mkdir -p ~/.ssh |
Теперь вы можете использовать эту команду, чтобы добавить содержимое файла id_rsa.pub в файл authorized_keys в директории ~/.ssh на удаленном сервере:
|
1 |
echo public_key_string >> ~/.ssh/authorized_keys |
Вместо ввода «public_key_string» в этой команде вам нужно будет ввести содержимое ключа, которое вы получили ранее при выполнении команды cat ~/.ssh/id_rsa.pub.
Аутентификация с помощью SSH-ключа
Теперь вы можете легко войти в свою учетную запись, используя только SSH-ключи. Это означает, что вам больше не нужен пароль для доступа к учетной записи сервера. Вы будете использовать учетные данные, которые обычно используете для входа:
|
1 |
ssh username@remote_host |
Это может привести к появлению следующего сообщения:
|
1 2 3 |
The подлинность of хоста '111.111.11.111 (111.111.11.111)' не 'может быть установлена. ECDSA ключ отпечаток is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Вы уверены, что хотите продолжить подключение продолжить подключение (yes/no)? yes |
Не беспокойтесь, если увидите это сообщение. Оно просто означает, что локальная система не может распознать удаленный хост. Обычно это происходит при самом первом подключении к хосту. Все, что вам нужно сделать, это ввести «yes» и нажать Enter. Возвращаясь к некоторым предыдущим шагам: если вы использовали парольную фразу, именно здесь вам придется ее ввести. Если нет, вы войдете в свою учетную запись сразу после аутентификации SSH-ключей. Это приведет к открытию нового сеанса оболочки через вашу текущую учетную запись на локальном компьютере.
Как отключить аутентификацию по паролю на вашем сервере?
Теперь, когда вы знаете, как настроить SSH-ключи, вам необходимо отключить аутентификацию по паролю. Даже если вы можете использовать SSH-ключи для аутентификации, вы все равно уязвимы для атак методом подбора (брутфорса), если процесс аутентификации по паролю активен. Прежде чем отключать механизм аутентификации по паролю, убедитесь, что аутентификация на основе SSH-ключей настроена для учетной записи root на сервере или что настроенная учетная запись имеет доступ sudo. Это необходимо подтвердить, чтобы гарантировать сохранение административного доступа к учетной записи даже при отключенных паролях. Теперь вы можете использовать этот SSH-ключ для входа в свою учетную запись на сервере. Следующий шаг — открыть конфигурационный файл демона SSH:
|
1 |
sudo nano /etc/ssh/sshd_config |
Здесь вам нужно найти следующую директиву:
|
1 |
PasswordAuthentication |
Вам нужно раскомментировать эту строку и изменить значение на «no» следующим образом:
|
1 |
PasswordAuthentication no |
Это отключит аутентификацию по паролю. Просто сохраните файл и закройте его по завершении. Наконец, вам нужно перезагрузить устройство, чтобы применить изменения. Если вы используете устройство на базе Ubuntu или Debian, вы также можете использовать следующую команду для отключения входа по паролю:
|
1 |
sudo service ssh restart |
Чтобы убедиться, что ваш демон (sshd) разрешает только аутентификацию на основе SSH на сервере под управлением CentOS или Fedora, используйте команду:
|
1 |
sudo service sshd restart |
Заключение
После выполнения всех этих шагов на вашем сервере должна быть настроена и запущена аутентификация на основе SSH-ключей. Теперь вы можете быть уверены, что ваши серверы в безопасности и защищены!
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.