Бесплатная миграция IT-инфраструктуры в облако
На главную
61c46507-12c7-4300-a301-bd8bc30c7c19
Инструкции для серверов

Авторизация по SSH-ключу

Использование SSH-ключа для подключения к серверу позволяет сделать работу более безопасной (снизится вероятность взлома учетной записи) и более удобной (не будет необходимости при каждом соединении вводить пароль).

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

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

Linux, MacOS, Windows 10

Создание SSH-ключей

Эта инструкция подойдет для ОС Linux, MacOS, а также для версий Windows 10 начиная с 1809 — в них доступен встроенный SSH-клиент. Если у вас более ранняя версия Windows, воспользуйтесь инструкцией из пункта Старые версии Windows (без OpenSSH).

Запустите терминал или Windows PowerShell на вашем компьютере и выполните команду:

ssh-keygen

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

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

Нажмите Enter — ключ будет сохранен в указанную директорию по умолчанию.

Далее вам будет предложено задать пароль (кодовую фразу) для ключа. Вы можете задать ее или оставить пустой, просто нажав Enter. Обратите внимание, что если вы зададите кодовую фразу, ее потребуется вводить при каждой авторизации по ключу.

Group 1321314118

Процедура создания ключей завершена, ключи сохранены в директории ~/.ssh/ в файлах id_rsa и id_rsa.pub.

Можно скопировать значение публичного ключа прямо в терминале. Чтобы вывести его в терминал, выполните: 

cat ~/.ssh/id_rsa.pub

Теперь публичный ключ необходимо скопировать на сервер.

Копирование ключа на сервер

Выполните в терминале следующую команду, указав вместо user имя пользователя, созданного на сервере, а вместо server — IP-адрес вашего сервера.

Для Linux и MacOS:

ssh-copy-id user@server

Например:

ssh-copy-id root@2.59.43.145

Для Windows:

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh user@server "cat >> .ssh/authorized_keys"

Например:

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh root@213.171.8.153 "cat >> .ssh/authorized_keys"

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

ssh user@server

Например:

ssh root@213.171.8.153

Image 127

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

sudo journalctl -u ssh

Если в логах наблюдается строка:

userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]

Значит, на вашем сервере отключена возможность подключения с использованием шифрования RSA-1. В качестве решения, вы можете разрешить авторизацию с таким ключом, добавив в файл /etc/ssh/sshd_config.d/enable_rsa_keys.conf следующую строку

HostKeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa

После чего перезапустите службу:

sudo systemctl restart sshd

Или, что более правильно, создайте другой ключ с более стойким шифрованием. Например, для создания ключа с шифрованием rsa-sha2-512:

ssh-keygen -t rsa-sha2-512

Или для использования ed25519:

ssh-keygen -t ed25519

И загрузите новый ключ повторно на сервер.

Старые версии Windows (без OpenSSH)

Если вы используете версию Windows без OpenSSH, вам потребуется специальная программа — PuTTYgen. Вы можете скачать дистрибутив puttygen.exe с официального сайта PuTTY.

Создание SSH-ключей с помощью PuTTYgen

  1. Запустите программу, в открывшемся окне выберите RSA в блоке «Type of key to generate» и нажмите «Generate».
  2. Пока создается ключ, водите мышью в хаотичном порядке в пространстве под строкой загрузки для генерации случайных значений.
  3. После того, как ключ будет создан, в окне программы вы сможете задать «Key passphrase» (кодовую фразу) для ключа. Это необязательно, вы можете оставить строку пустой. Если вы решите задать кодовую фразу, обратите внимание, что ее потребуется вводить при каждой авторизации по ключу.
  4. Далее сохраните созданные ключи, нажав на кнопки «Save public key» и «Save private key», например, под именами id_rsa.pub и mykey.ppk.
  5. Также скопируйте и сохраните в любом текстовом файле содержимое окна «Public key for pasting…» — оно потребуется при копировании созданного ключа на сервер.

На этом процедура создания ключей завершена.

Копирование ключа на сервер с помощью pageant

В процессе копирования ключей вам потребуется утилита pageant. Вы можете скачать дистрибутив pageant.exe с официального сайта PuTTY

  1. Подключитесь к серверу по SSH и выполните команду для создания на сервере файла для хранения ключей:
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
  1. Откройте созданный файл с помощью текстового редактора:
nano ~/.ssh/authorized_keys
  1. Вставьте в него текст public key, ранее скопированный из окна PuTTYgen, и сохраните файл.
  2. Запустите pageant — его иконка появится в трее. Щелкните по ней правой кнопкой мыши и выберите «Add Key».
  3. В открывшемся окне укажите путь к приватному ключу mykey.ppk, сохраненному ранее, и нажмите «Open». Если при создании ключа вы указывали кодовую фразу, pageant запросит ее на данном этапе.
  4. Для проверки работы авторизации по ключу снова запустите утилиту PuTTY, подключитесь к вашему серверу и введите свой логин. Если все настроено корректно, вы увидите подобный вывод в окне консоли:
Authenticating with public key "rsa-key-20151220" from agent

Отключение доступа по паролю

Для того, чтобы доступ к серверу мог осуществляться только по ключу, необходимо запретить авторизацию по паролю. Для этого требуется внести правки в файл /etc/ssh/sshd_config.

  1. Откройте файл командой:
sudo nano /etc/ssh/sshd_config
  1. Найдите в нем строку PasswordAuthentication и замените ее значение на: PasswordAuthentication no.
  2. Сохраните изменения, после чего перезапустите службу SSH: 
sudo service ssh restart

Если после выполненных действий у вас по-прежнему запрашивается пароль, проверьте, нет ли в директории /etc/ssh/sshd_config.d/ файла 50-cloud-init.conf с директивой PasswordAuthentication yes.

Если файл присутствует — удалите его, после чего перезапустите службу SSH.

Была ли статья полезна?
Ваша оценка очень важна
Комментарии 9
Сергей
03.11.2024, 10:57

Всем доброго времени. В отношении ОС Debian 12. Поддержка авторизации SSH по RSA ключам здесь отключена. Считается старой и небезопасной. Если нужно, ee можно включить, прописав в созданный файл: /etc/ssh/sshd_config.d/enable_rsa_keys.conf прописать инструкции:

HostKeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa

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

Timeweb Cloud
Timeweb Cloud
20.11.2024, 17:30

Добрый день!

Спасибо, что обратили внимание на этот момент! Мы обновили статью, добавив эту информацию.

Судя по чейнджлогу OpenSSH, была отключена авторизация с использованием RSA-1, в то время как алгоритмы rsa-sha2-256 и rsa-sha2-512 продолжают поддерживаться и используются по умолчанию при генерации ключей.

Александр
Александр
07.01.2024, 09:15

команду mkdir ~/.ssh уберите там уже будет эта папка

Команда Timeweb Cloud
Команда Timeweb Cloud
15.01.2024, 06:18

Спасибо, поправили 👌

Илья Женецкий (ilyazheprog)
Илья Женецкий (ilyazheprog)
11.12.2023, 00:53

Сделал по статье, не логинит по ключу

Команда Timeweb Cloud
Команда Timeweb Cloud
11.12.2023, 03:23

Добрый день! Мы обновили инструкцию для Windows, если вы пользуетесь этой ОС — попробуйте снова, пожалуйста. Если проблема сохраняется (или если вы используете другую ОС), напишите в поддержку из своей панели, пожалуйста, поможем разобраться.

Ildar Sabirov
Ildar Sabirov
09.06.2023, 09:33

Не понимаю в чем проблема.

PasswordAuthentication no - сделал и сохранил ... как только не перезагружал, даже через сервер. Все-равно вход работает как по ключу, так и по паролю.

image.png

image.png

Команда Timeweb Cloud
Команда Timeweb Cloud
13.06.2023, 12:13

Тут лучше предметно пообщаться с поддержкой, с PasswordAuthentication no ssh может запросить пароль, но по итогу принимать его не должно. Напишите нам через тикет, посмотрим и поможем.

Команда Timeweb Cloud
Команда Timeweb Cloud
28.06.2023, 07:11

Ильдар, здравствуйте! Перепроверили с нашими специалистами — проблема, вероятнее всего, из-за файла 50-cloud-init.conf в каталоге /etc/ssh/sshd_config.d/. Файл можно смело удалять, после чего пароль запрашиваться не будет. Добавили эту информацию в статью. Спасибо, что обратили внимание!