Вопрос или проблема
Я создал публичный и приватный ключи с помощью 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). Такой подход обеспечивает более высокий уровень безопасности, так как закрытый ключ не передается по сети.
Основные шаги настройки:
- Генерация ключей: Открытый и закрытый ключи создаются с помощью инструмента PuTTYgen.
- Копирование открытого ключа на сервер: Открытый ключ добавляется в файл
~/.ssh/authorized_keys
на сервере. - Настройка клиента для использования закрытого ключа: Программа, например WinSCP или PuTTY, должна знать, где искать закрытый ключ.
Пример
Рассмотрим пример настройки с использованием PuTTY и WinSCP, пользуясь PPK-файлом.
-
Генерация ключей:
- Откройте PuTTYgen и создайте пару ключей.
- Сохраните закрытый ключ как PPK файл.
- Скопируйте текст из поля "Public key for pasting into OpenSSH authorized_keys file".
-
Копирование открытого ключа на сервер:
- Войдите на сервер с помощью SSH.
- Убедитесь, что папка
~/.ssh
существует и у неё установлены правильные права (700). - Добавьте скопированный текст в файл
~/.ssh/authorized_keys
, используйте редакторы, такие какnano
илиvim
. - Проверьте, что права доступа к файлу
authorized_keys
установлены на 600.
-
Настройка WinSCP для использования закрытого ключа:
- Откройте WinSCP и перейдите к настройкам подключения.
- В разделе "Advanced Site Settings" выберите "SSH -> Authentication".
- Укажите путь к PPK файлу закрытого ключа.
Применение
Теперь к практическому решению проблемы. Если после выполненных действий аутентификация по ключу не работает, выполните следующие шаги:
-
Проверка прав доступа:
- Убедитесь, что права доступа к папке
~/.ssh
установлены на 700, а кauthorized_keys
на 600. - Команда для проверки и изменения прав доступа:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
- Убедитесь, что права доступа к папке
-
Проверка содержимого файла
authorized_keys
:- Убедитесь, что в файле
authorized_keys
содержится правильный открытый ключ. Ошибки могут возникнуть из-за случайных символов или пробелов при копировании.
- Убедитесь, что в файле
-
Журнал ошибок:
- Прочитайте журнал попыток подключения. Если в журнале отображается сообщение "Server refused our key", возможно, ключ в файле
authorized_keys
отличается от того, который используется на клиенте.
- Прочитайте журнал попыток подключения. Если в журнале отображается сообщение "Server refused our key", возможно, ключ в файле
-
Проверка конфигурации SSH сервера:
- Файл конфигурации OpenSSH сервера обычно находится по адресу
/etc/ssh/sshd_config
. Убедитесь, что параметрPubkeyAuthentication
установлен вyes
.
- Файл конфигурации OpenSSH сервера обычно находится по адресу
Если после выполнения всех вышеперечисленных действий проблема не исчезла, протестируйте подключение с помощью другого SSH клиента, такого как PuTTY, чтобы исключить проблему на стороне WinSCP.
Также выполнение команды ssh-copy-id
, как описано выше, может помочь автоматически настроить правильные права и содержимое authorized_keys
файла.
Подведем итог: при использовании аутентификации по ключу необходимо убедиться в соответствии всех параметров и отсутствии ошибок в конфигурации. Надеюсь, эта инструкция поможет вам успешно настроить безопасное соединение.