Настройка аутентификации с использованием открытого ключа на сервере Linux с Windows (приватный ключ ppk)

Вопрос или проблема

Я создал публичный и приватный ключи с помощью PuTTYgen и скопировал публичный ключ в .ssh/authorized_keys в рамках своей учётной записи.

Затем я попытался указать приватный ключ при попытке входа, но, похоже, он его не распознает и продолжает запрашивать имя пользователя/пароль, которые у меня были изначально. Я использую WinSCP для подключения и указываю приватный ключ в разделе Advanced/Authentication. Не упустил ли я какие-либо шаги в WinSCP?

введите описание изображения здесь

Содержимое authorized_keys выглядит так:

ssh-rsa AAAAB3NzaC1yc2EAAAABpEVSiiRXi7tOHpkOyFa9w2OLpBep31k9lePCK7RQxsdfs9u11+rdu0XCidRKOY5j4anD1eDaNBj87wqZbsreRe5cFcsakyGUAYXAvqgGApvsep31k9lePCK7RQxlOY5j4anD1eDaNBj8LJO++K3SkUN8E0srRBO8YyMT6Y03/F7+AAAAB3NzaC1yc2Q4h2RLGtr12CDKSBVAnFEc+JucuF4uF0WY4Sh66MSFI63mCQFu9iYNYwWyT6lUo6sks4WypEVSiiRXi7tOHpkOyFa9w2OLpBzAlTA/VSQwdNTFYUI1vquaufZ9ORzTa6dkbBRo/mLVdevYSRMSDw1BUcinYz/ogdxRvw==

Я изменил права доступа к .ssh на 700 и authorized_keys на 600.

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


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

Сервер отказал в нашем ключе

Вот лог из PuTTY

2018-04-28 17:43:05 Подключение к 158.85.98.202 порт 22
2018-04-28 17:43:05 Мы заявляем версию: SSH-2.0-PuTTY_Release_0.70
2018-04-28 17:43:05 Версия сервера: SSH-2.0-OpenSSH_7.4
2018-04-28 17:43:05 Используем протокол SSH версии 2
2018-04-28 17:43:05 Производим обмен ключами ECDH с кривой Curve25519 и хешем  SHA-256
2018-04-28 17:43:05 Сервер также имеет ключ-хост ecdsa-sha2-nistp256, но мы его не знаем
2018-04-28 17:43:05 Отпечаток ключа хоста:
2018-04-28 17:43:05 ssh-ed25519 256         6b:0d:e2:f6:c5:9e:15:84:0c:1b:2c:19:62:cd:5b:ef
2018-04-28 17:43:05 Инициализация AES-256 SDCTR шифрования клиент-сервер
2018-04-28 17:43:05 Инициализация HMAC-SHA-256 алгоритма MAC клиент-сервер
2018-04-28 17:43:05 Инициализация AES-256 SDCTR шифрования сервер-клиент
2018-04-28 17:43:05 Инициализация HMAC-SHA-256 алгоритма MAC сервер-клиент
2018-04-28 17:43:05 Чтение файла ключа "C:\Users\\Desktop\private_key.ppk"
2018-04-28 17:43:09 Предложен публичный ключ
2018-04-28 17:43:09 Сервер отказал в нашем ключе
2018-04-28 17:43:09 Используем SSPI из SECUR32.DLL
2018-04-28 17:43:09 Попытка аутентификации GSSAPI
2018-04-28 17:43:09 Запрос аутентификации GSSAPI отклонён

Чтобы избежать распространённых ошибок при настройке аутентификации с помощью публичного ключа, используйте ssh-copy-id команду/скрипт. Так как у вас могут возникнуть проблемы с его запуском в Windows, вы можете запустить его на самом сервере.

  • В PuTTYgen загрузите ваш приватный ключ (.ppk);

  • Скопируйте содержимое бокса Публичный ключ для вставки в файл OpenSSH authorized_keys в буфер обмена.

  • Вставьте его в ваш любимый редактор (подойдет даже Блокнот Windows).

  • Сохраните содержимое в файл с расширением .pub.

  • Загрузите .pub файл на сервер.

  • Войдите на сервер с помощью SSH клиента, такого как PuTTY.

  • На сервере введите:

    ssh-copy-id -i mykey.pub username@localhost
    

Если вы не хотите делать это вручную, вы можете использовать WinSCP. Он может настроить аутентификацию публичного ключа за вас.
Используйте кнопку Tools > Install Public Key into Server на SSH > Authentication странице диалога расширенных настроек сайта в WinSCP.

введите описание изображения здесь


С версии 6.4.2 бета, WinSCP также имеет синтаксис командной строки для установки:

winscp.com /copyid /identity=mykey.pub [email protected]

(Я автор WinSCP)


Ещё один альтернативный способ – использование скрипта ssh-copy-id с какой-либо реализацией/эмуляцией bash для Windows. Например, Git for Windows поставляется с bash и копией ssh-copy-id.

Если вы используете Windows 10 с PowerShell, вы можете сделать следующее:

1. Генерация ключа

Сначала в Windows сгенерируйте ключ RSA. По умолчанию ключ будет сохранён по адресу $env:USERPROFILE\.ssh\id_rsa.pub:

## Генерация ключа RSA
ssh-keygen -t rsa -b 4096

Вы можете использовать параметр -f, чтобы добавить пользовательское имя файла и местоположение

## Генерация ключа RSA
ssh-keygen -t rsa -b 4096 -f <custom-path>

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

## Копирование на удаленный сервер
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh <user>@<host> -p <port> "cat >> .ssh/authorized_keys"

С пользовательским портом и путём файла:

## Копирование на удаленный сервер
type <custom-path> | ssh <user>@<host> -p <port> "cat >> .ssh/authorized_keys"

Замените <user>, <host>, <port> и <custom-path> на ваши данные.

3. Добавление в ваше любимое ssh приложение:

Вы найдете два основных файла:

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        11/23/2021   3:20 PM            199 config
-a----        11/23/2021   7:09 PM           3381 id_rsa
-a----        11/23/2021   7:09 PM            746 id_rsa.pub
-a----        11/23/2021   3:20 PM            742 known_hosts

В этом примере id_rsa.pub — это публичный ключ, а id_rsa — ваш приватный. Добавьте приватный ключ в Putty или MobaXterm или любое приложение, которое вы хотите использовать.

.

Ответ или решение

Настройка аутентификации с использованием открытого ключа на сервере Linux с Windows с использованием PPK-файла – обычная задача для системных администраторов. Позвольте предложить детальную инструкцию, которая поможет вам корректно настроить подключение и избежать распространенных ошибок.

Теория

Аутентификация с использованием открытого ключа – это метод, при котором для входа на сервер не требуется ввод пароля. Вместо этого используется пара ключей: один открытый и один закрытый. Открытый ключ хранится на сервере в файле authorized_keys, а закрытый ключ – на клиентской машине (Windows). Такой подход обеспечивает более высокий уровень безопасности, так как закрытый ключ не передается по сети.

Основные шаги настройки:

  1. Генерация ключей: Открытый и закрытый ключи создаются с помощью инструмента PuTTYgen.
  2. Копирование открытого ключа на сервер: Открытый ключ добавляется в файл ~/.ssh/authorized_keys на сервере.
  3. Настройка клиента для использования закрытого ключа: Программа, например WinSCP или PuTTY, должна знать, где искать закрытый ключ.

Пример

Рассмотрим пример настройки с использованием PuTTY и WinSCP, пользуясь PPK-файлом.

  1. Генерация ключей:

    • Откройте PuTTYgen и создайте пару ключей.
    • Сохраните закрытый ключ как PPK файл.
    • Скопируйте текст из поля "Public key for pasting into OpenSSH authorized_keys file".
  2. Копирование открытого ключа на сервер:

    • Войдите на сервер с помощью SSH.
    • Убедитесь, что папка ~/.ssh существует и у неё установлены правильные права (700).
    • Добавьте скопированный текст в файл ~/.ssh/authorized_keys, используйте редакторы, такие как nano или vim.
    • Проверьте, что права доступа к файлу authorized_keys установлены на 600.
  3. Настройка WinSCP для использования закрытого ключа:

    • Откройте WinSCP и перейдите к настройкам подключения.
    • В разделе "Advanced Site Settings" выберите "SSH -> Authentication".
    • Укажите путь к PPK файлу закрытого ключа.

Применение

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

  1. Проверка прав доступа:

    • Убедитесь, что права доступа к папке ~/.ssh установлены на 700, а к authorized_keys на 600.
    • Команда для проверки и изменения прав доступа:
      chmod 700 ~/.ssh
      chmod 600 ~/.ssh/authorized_keys
  2. Проверка содержимого файла authorized_keys:

    • Убедитесь, что в файле authorized_keys содержится правильный открытый ключ. Ошибки могут возникнуть из-за случайных символов или пробелов при копировании.
  3. Журнал ошибок:

    • Прочитайте журнал попыток подключения. Если в журнале отображается сообщение "Server refused our key", возможно, ключ в файле authorized_keys отличается от того, который используется на клиенте.
  4. Проверка конфигурации SSH сервера:

    • Файл конфигурации OpenSSH сервера обычно находится по адресу /etc/ssh/sshd_config. Убедитесь, что параметр PubkeyAuthentication установлен в yes.

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

Также выполнение команды ssh-copy-id, как описано выше, может помочь автоматически настроить правильные права и содержимое authorized_keys файла.

Подведем итог: при использовании аутентификации по ключу необходимо убедиться в соответствии всех параметров и отсутствии ошибок в конфигурации. Надеюсь, эта инструкция поможет вам успешно настроить безопасное соединение.

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

Капча загружается...