33

У меня есть пара открытый / закрытый ключ. Ни с одним из них не связан какой-либо пароль.

Всякий раз, когда я пытаюсь использовать ssh с использованием частного или открытого (и я почти уверен, что должен использовать только открытый ключ), меня запрашивают ключевую фразу, и, конечно, я не могу подключиться.

У кого-нибудь есть идеи, как обойти это? Я неправильно набираю какую-то команду? Я пытаюсь подключиться к серверу ssh, который я настроил в моем файле ~/.ssh/config (правильно, поскольку точно такая же настройка работает на другом сервере) с ключом, хранящимся в ~/.ec2/key.ppk

Я также попытался с помощью puttygen.exe создать новый закрытый ключ С парольной фразой, а затем с помощью этого ключа, и когда я набираю парольную фразу, он все равно не работает.

9 ответов9

28

Прежде всего, это закрытый ключ с парольной фразой. Это проверяет открытый ключ, хранящийся на удаленном сервере.

Лучше всего предположить, что вы пытаетесь использовать формат ключа закрытого ключа (ppk) с openssh, это не работает .... PuTTYgen имеет опцию экспорта для openssh, если это так.

ssh-rsa AAAAB3NzaC1y...... etc

Я также предполагаю, что на сервере, к которому вы пытаетесь подключиться по ssh, ваш открытый ключ правильно хранится в файле авторизованного ключа (как правило, в ~/.ssh/authorized_keys ).

Другое предположение будет, что правильный ключ не будет выбран. Вот некоторые вещи, которые я бы попробовал:

Сброс ключевой фразы с помощью ssh-keygen , вот так ...

$ ssh-keygen -f ~/.ec2/key.ppk -p

Это подтвердит, если на самом деле ваш ключ уже имеет (или не имеет) парольную фразу.

Во-вторых, я бы попытался подключиться, используя подробный вывод, явно указав ваш открытый ключ:

$ ssh host -i ~/.ec2/key.ppk -vvv

Это даст вам больше представления о том, что происходит.

15

Вы можете запустить ssh-agent. Смотрите здесь для обсуждения.

Короткая версия, которая работала для меня (в bash):

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-rnRLi11880/agent.11880; export SSH_AUTH_SOCK;
SSH_AGENT_PID=11881; export SSH_AGENT_PID;
echo Agent pid 11881;

Я взял 3 строки, которые повторяются, и выполнил их. Другой способ сделать это - взять вывод -s:

$ eval `ssh-agent -s`

Затем я добавил свои учетные данные:

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/me/.ssh/id_rsa: 
Identity added: /home/me/.ssh/id_rsa (/home/me/.ssh/id_rsa)

Теперь агент предоставляет учетные данные вместо того, чтобы мне приходилось вводить мою фразу-пароль.

Я полагаю, что ssh-agent уходит, когда оболочка закрывается, поэтому при запуске следует записывать сценарии для максимального удобства. Ссылка, которой я поделился, также описывает сценарии.

4

Когда вы устанавливаете свой открытый ключ, вы, вероятно, (возможно, непреднамеренно) устанавливаете его с помощью ключевой фразы.

Возможно, вам нужно начать все заново - я не использовал puttygen, но вы можете удалить (или переименовать) открытый ключ в вашем каталоге .ssh, использовать ssh-keygen для создания нового (убедитесь, что вы не предоставили фразу-пароль) и затем отправьте public_key в файл author_keys на сервере, к которому вы пытаетесь подключиться.

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

3

Одна вещь, которую нужно проверить, если ваш файл sshd_config имеет StrictModes = yes, то каталог $ HOME или каталог $ HOME/.ssh не должны быть доступны для записи всем группам или другим файлам. В противном случае аутентификация не удастся ни на что.

1

Я сделал ошибку, случайно перезаписав файл ~/.ssh/id_rsa файлом ~/.ssh/id_rsa.pub. Это заставит ssh запросить парольную фразу.

1

Убедитесь, что закрытый ключ id_rsa не имеет дополнительных разрывов строк в конце, в некоторых случаях дополнительные разрывы строк заставят ssh-keygen запросить пароль, попробуйте следующее:

sed  '/^$/d' /path/to/key > id_rsa

тестовое задание:

ssh-keygen -yf id_rsa
0

Попробуйте просмотреть файлы журнала на сервере. Смотрите /var /log /auth log (например, /var /log /authlog для OpenSSH, хотя я видел, что некоторые операционные системы используют Portable OpenSSH и /var/log/auth.log) и проверьте конец этого файла.

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

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

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

0

Я столкнулся с этой проблемой на днях. В частности, я пытался скопировать / вставить закрытый ключ AWS с одного компьютера на другой.

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

Я предполагаю, что это означает, что рекомендуется использовать SSH текстовый файл по проводам, а не пытаться копировать и вставлять между окнами терминала.

0

На OSX я смог просто запустить:

$ ssh-add ~/.ssh/id_rsa Enter passphrase for /Users/me/.ssh/id_rsa: `Identity added: /Users/mikekilmer/.ssh/id_rsa (/Users/mikekilmer/.ssh/id_rsa)

Пароль был сохранен приложением Keychain Access, которое находится в папке Applications> Utilities. Я только что ввел id_ в поле поиска.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .