Намагаючись зробити аутентифікацію ssh за допомогою ключових файлів: сервер відмовився від нашого ключа


53

Я намагаюся налаштувати аутентифікацію ssh за допомогою ключових файлів замість імені користувача / пароля. Клієнт - це вікно Windows, на якому працює PuTTY, а сервер - сервер Ubuntu 12.04 LTS.

Я завантажив puttygen.exe і змусив його створити пару ключів. У /etc/ssh/sshd_configмене є такий рядок:

AuthorizedKeysFile %h/.ssh/authorized_keys

і у файлі відкритого ключа мого клієнта написано це:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "my@email.address.com"
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAr3Qo6T5XU06ZigGOd3eKvfBhFLhg5kWv8lz6
qJ2G9XCbexlPQGanPhh+vcPkhor6+7OmB+WSdHeNO652kTofnauTKcTCbHjsT7cJ
GNrO8WVURRh4fabknUHPmauerWQZ6TgRPGaz0aucU+2C+DUo2SKVFDir1vb+4u83
AV1pKxs=my@email.address.com
---- END SSH2 PUBLIC KEY ----

Я скопіював частину з "ssh-rsa AAA" на "my@email.address.com" і помістив її у файл ~/.ssh/authorized_keysна своєму сервері (у власному домашньому папці). У PuTTY у розділі З'єднання> SSH> Auth я ввів шлях до приватного ключа, який він створив на моєму клієнті, і зберег налаштування сеансу.

Я перезапустив ssh-сервер

sudo service ssh restart

Тепер, якщо я завантажую профіль у PuTTY (я перевірив, що приватний ключ все ще знаходиться у підключенні> SSH> Auth, і що шлях правильний) та запустіть профіль, він говорить

Server refused our key

Я спробував ввести відкритий ключ у файл під каталогом, ./ssh/authorized_keys/ але це не допомогло, тому я використовував ./ssh/authorized_keysяк файл , вставляючи ключ у нього. Я також спробував створити на сервері пару приватних / відкритих ключів, поставивши відкритий ключ ./ssh/authorized_filesі завантаживши приватний в PuTTY на мій клієнт. Перезавантаження сервера теж не допомогло.

Я виявив, що помилку можна усунути, помістивши ключ у місце, розташоване поза домашньою папкою користувача, але це корисно лише в тому випадку, якщо домашня папка зашифрована, а це - ні.

Також спробував створити ключ 4096 біт, думаючи, що, можливо, 1024 був занадто короткий.

Як я можу змусити це працювати? Дякую!

Редагувати:

Гаразд, /var/log/auth.logсказав:

sshd: Authentication refused: bad ownership or modes for directory /home/vorkbaard/.ssh

Google каже мені, що ~/.ssh/повинно бути 700 і ~/.ssh/authorized_keys600, тож я це зробив. Тепер /var/log/auth.logкаже:

sshd: error: key_read: uudecode AAAAB3N [etc etc etc until about 3/4 of my public key]

Відповіді:


95

Гаразд, це виправлено, але я не бачу, чим це відрізняється від того, що я вже намагався.

Що я зробив:

  • генерувати ключові пари з puttygen.exe (довжина: 1024 біт)
  • завантажте приватний ключ у профіль PuTTY
  • введіть відкритий ключ ~/.ssh/authorized_keys одним рядком (потрібно почати з ssh-rsa)
  • chmod 700 ~/.ssh
  • chmod 600 ~/.ssh/authorized_keys
  • chown $USER:$USER ~/.ssh -R
  • зміни, /etc/ssh/sshd_configщоб вона містилаAuthorizedKeysFile %h/.ssh/authorized_keys
  • sudo service ssh restart

Для усунення несправностей робіть # tail -f /var/log/auth.log.

Спасибі за вашу допомогу!


1
Хм, так що сталося з цією sshd: error: key_read: uudecode AAAAB3Nпомилкою auth.log?
Алаа Алі

Я не маю поняття, Алаа. Можливо, я допустив помилку, вставляючи попередній рядок ключа. Auth.log зараз не отримує більше записів, і автентифікація на основі ключів працює бездоганно. Моя основна проблема полягала в тому, що я не був дуже впевнений у тому, що потрібно зробити, зробивши те, що набагато складніше. Тож я не знаю чому, але це працює. Ще раз дякую за допомогу :)
Forkbeard

Дивовижно !!! Я чухаю голову вже 2 дні. Ця відповідь економить день !!
naka

Крок 3 був для мене хитрістю. Я не ставив відкритий ключ у authorized_keysфайл, я просто вставив свій mykey.pubфайл у ~/.sshпапку і подумав, що він підбере його. Натомість мені потрібно було запустити це або відредагувати та вставити нижче інших клавіш, які можуть бути там. cat mykey.pub >> authorized_keys. Зараз здається простим, але засвоєний урок - це те, що всі відкриті ключі повинні жити authorized_keysне лише в ~/.ssh/каталозі. Хтось, будь ласка, порадить, якщо це неправильне твердження.
timbrown

якщо кроки не допомагають, перевірте також: 1. Ви скопіювали збережений відкритий ключ PuTTY в авторизовані ключі, а не OpenSSH 2. Якщо ви скопіювали за допомогою копіювання / вставки з PuTTYgen (що ви повинні зробити), можливо, ви розділили відкритий ключ у кількох рядках; це повинен бути єдиний рядок; переконайтеся, що ви не додавали провідні чи кінцеві пробіли під час копіювання завдяки r_hartman centos.org/forums/viewtopic.php?t=990
mvladk

23

Я щойно стикався з цією проблемою. Незважаючи на те, що налаштування конфігурації встановлено правильно, як уже згадувалося в цій темі (дозволи на дозволені_кейси тощо), виявляється, я мав відкритий ключ у неправильному форматі. Це було у формі:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "imported-openssh-key"
AAAAB3NzaC1yc2EAAAADAQABAAABAQDUoj0N3vuLpeviGvZTasGQ...
... lPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT
---- END SSH2 PUBLIC KEY ----

Що не працювало. Але це налагодило роботу, маючи це у формі:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU.....j0N3vuLpeviGvZTasGQa1rcJiPXQMW7v3uurb+n94B9MQaaWR0odsg5DJQL92TNenOda5BO1nd08y6+sdLQmHXExTz6X8FzgoVsAkEl3RscxcxHUksiKA9JfTo38vQvG/bPxIHMCuSumCQVA1laf3rO/uOrkcB7iMWhaoi1/z6AbFtPzeh7xjGfInMWwtBI0CsHSRF73VWIxT26w0P+KjafCjSn/7vDO1bT8QHujSQelU/GqaVEvbbvPl1a7POVjKgHLNekolwRKfNeVEewcnmZaoqfHgOKlPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT UserName@HOSTNAME

14
Ви можете використовувати ssh-keygen -i -f filenameofwindowsformpub.keyдля перетворення відкритого ключа у формат, зрозумілий вашому серверу OpenSSH.
Чорний

Так, це працювало для мене! Це повинно бути в один рядок. Не можу повірити, що це було тільки це!
adelriosantiago

1
HI kuraara Я вважаю, що вищезазначена інструкція від @Black повинна бути помітною у відповіді.
екернер

Чи можу я додати коментар до формату сервера OpenSSH? Для людини важко сказати, який комп'ютер являє собою цей ключ.
користувач1700890

Коли я дотримуюся пропозиції від @Black, в кінці рядка немає UserName @ HOSTNAME. Я не знаю, чи важлива ця частина.
arnoldbird

9

проблема полягає в тому, що Windows використовує інший новий рядок, ніж Linux, тому при копіюванні ключа з Windows на Linux, в кінці рядка є \ n, яке ви не можете побачити на Linux у редакторі.

Якщо ви хвостите на /var/log/auth.log і намагаєтесь увійти, помилка виглядає так:

sshd: помилка: key_read: uudecode AAAAB3N [....] == \ n

Якщо ви поміняєте свій ключ на Windows так, щоб він був в одному рядку без нової лінії в кінці і скопіював його потім в Linux, він повинен працювати (зробив фокус для мене).


це була моя проблема, але я не бачив нічого в auth.log, щоб припустити, що так було. засмучує ...
Ентоні

8

Мені довелося змінити дозволи на домашній каталог

chmod 700 ~

2
Це працювало і для мене (хоча на AIX).
stevepastelan

Працював для мене і на CentOS
Jaywalker,

Працював для мене на Redhat! Здається, доступ до групового запису є специфічним питанням. Все ще працює для мене, якщо я залишаю на місці дозволи на групове читання: "chmod 740 ~".
Павло

6

Мені довелося змінити дозволи для каталогу ~ / .ssh з 770 на 700 і дозволи на файл ~ / .ssh / pooblasti_keys з 660 на 600.

З якихось причин видалення групових дозволів вирішило цю проблему для мене.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

5

~/.ssh/authorized_keysФайл вимагає ключів , щоб бути на одній лінії. Якщо ви додали його в декількох рядках, як у пасті вище, спробуйте приєднатись до цих рядків.


Дякую, це має сенс і тепер я розумію, чому це файл, а не каталог. Однак це не допомогло.
Forkbeard

3
для тих, кого це може збентежити, що він має на увазі, що кожен ключ повинен бути в одному рядку, але різні клавіші повинні бути в різних лініях.
Ентоні

2

Ось що для мене спрацювало:

Після того puttygen, як ви згенерували свої ключі, переконайтеся, що ви скопіювали та вставили інформацію з верхнього поля, щоб увійти у файл дозволених ключів. Якщо ви збережете ваш відкритий ключ на клієнтській машині, а потім відкриєте його, текст відрізняється від тексту у верхній частині puttygenекрана. Знову ж таки переконайтеся, що ви скопіювали та вставили текст із ТОП puttygenекрану (після створення ключів) у файл дозволених ключів, у якому слід розмістити ~/.ssh.


це фактично вирішило проблему. Я не отримую чому, якщо натиснути кнопку "Зберегти відкритий ключ", чому він не зберігає належний формат.
луки

1

Окрім усіх вищезазначених відповідей, переконайтесь, що ви скопіювали та вставили ключ puttygenправильно!

Якщо ви просто двічі клацніть на значній частині рядка клавіш, щоб вибрати його, ви не зможете отримати весь рядок, оскільки текстове поле розбиває рядки на деяких символах, наприклад +, таким чином, щоб ви не вибрали текст після +символу ( який ви не бачите, оскільки текстове поле занадто мало). Обов’язково виберіть весь рядок вручну - від ssh-rsaсамого кінця текстового поля.


1

Іноді це може бути проблема, пов’язана з наявністю відкритого ключа на одній лінії, такий підхід, здається, вирішує його

echo 'the content of the public key' > /root/.ssh/authorized_keys

1

для мене проблема була в тому, що я був створений ~/.ssh/authorized_keysза допомогою root так root. Мені довелося chown sshuser:sshuser ~/.ssh/authorized_keysтоді це почало працювати


1

Я теж зіткнувся з цією помилкою і вирішив її, змінивши дозволи на файл дозволених файлів на 600.

chmod 600 ~/.ssh/authorized_keys

1

Поширена помилка полягає в тому, що люди використовують текстовий редактор (наприклад, Vim) і вставляють скопійований текст перед активацією "вставки" (натисніть + i в Vim перед вставкою)


0

Насправді я змінив authorized_keysдозвіл 644, а потім вирішив проблему.

chmod 644 ~/.ssh/authorized_keys

0

для налагодження відкритого ssh можна використовувати:

sudo `which sshd` -p 2020 -Dd

він запускає sshd на іншому порту 2020. він запускає sshd як поточну програму, тому вихід виходить на екран. якщо закритий, він закритий.

потім спробуйте підключитися.

пояснення:

  • `what sshd` - знаходить адресу sshd, спробуйте виконати, котрий sshd побачить, що він друкує. при використанні зворотних лапок він виконує і повертає результат на місце.
  • -p 2020 - вказує порт
  • -D - журнал у файл
  • -d - журнал на екран

https://www.attachmate.com/documentation/rsit-unix-802/rsit-unix-guide/data/sshd_options_ap.htm


Чи можете ви розширити цю відповідь? Що тягне за собою аргументи? Що робить команда (для когось не досвідченого)?
Zzzach ...

-1

Я створював .ssh та файли-авторизовані ключі, коли входив у систему як root, що давав неправильні дозволи. Він також розмістив усі файли під кореневою каталогом.

Зміна права власності на ці файли на бажаного користувача не буде хорошою практикою, тому я відмовився від своїх кроків і переконався, що я увійшов як користувач, з яким хотів знову використовувати SSH і створив.

Вказівки для підключення Win7 до сервера Xubuntu 15.04: Як створити SSH-ключі з / Putty для підключення до VPS

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.