Відкритий ключ SSH не надсилатиметься на сервер


33

Я боровся з цим пару годин, тому будь-яка допомога дуже вдячна ...

У мене є 2x сервери, на яких я можу sshпрацювати з відкритими ключами від OSX, проблем взагалі немає, тому я впевнений, що з цим все добре sshd_config.

Я намагаюся налаштувати завдання cron для rsyncсинхронізації двох серверів і потрібен сервер B (резервне копіювання) sshна сервер A за допомогою відкритого ключа.

Я не можу протягом життя зрозуміти, чому він не знаходить мої відкриті ключі - вони знаходяться в ~/.ssh/(тобто /root/.ssh), і всі дозволи файлів є правильними на A&B.

Це вихід:

debug2: we did not send a packet, disable method
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/identity
debug3: no such identity: /root/.ssh/identity
debug1: Trying private key: /root/.ssh/id_rsa
debug3: no such identity: /root/.ssh/id_rsa
debug1: Trying private key: /root/.ssh/id_dsa
debug3: no such identity: /root/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password

Також зауважте, що він шукає приватні ключі, яких не існує ...

drwx------. 2 root root 4096 May 25 10:15 .
dr-xr-x---. 4 root root 4096 May 24 18:52 ..
-rw-------. 1 root root  403 May 25 01:37 authorized_keys
-rw-------. 1 root root    0 May 25 01:41 config
-rw-------. 1 root root 1675 May 25 02:35 id_rsa_tm1
-rw-------. 1 root root  405 May 25 02:35 id_rsa_tm1.pub
-rw-------. 1 root root  395 May 25 02:36 known_hosts

2
будь ласка, дайте нам вихідls -la /root/.ssh/
— mreithub

@mreithub Дякую за швидку відповідь - додано вище.
— Денні

3
спробуйте видалити _tm1зі своїх ключових імен файлів (тобто mv id_rsa_tm1 id_rsaі mv id_rsa_tm1.pub id_rsa.pub)
— mreithub

@mreithub Це спрацювало! Дуже дякую, проте я не розумію, чому я не можу додавати інші рядки до імені файлу. Я роблю це на своєму iMac для підключення до серверів без жодних проблем ... тобто я можу використовувати id_rsa.tm1.imac.pub без жодних проблем. Що робити, якщо я хотів кілька клавіш?
— Денні

Відповіді:


22

Подивіться на вашу сторінку ssh man:

   -i identity_file
          Selects a file from which the identity (private key) for public
          key authentication is read.  The default is ~/.ssh/identity for
          protocol   version   1,   and  ~/.ssh/id_dsa,  ~/.ssh/id_ecdsa,
          ~/.ssh/id_ed25519 and ~/.ssh/id_rsa  for  protocol  version  2.
          Identity files may also be specified on a per-host basis in the
          configuration file.  It is possible to have multiple -i options
          (and  multiple  identities  specified  in configuration files).

або сторінка людини ssh_config:

   IdentityFile
          Specifies a file from which the user's DSA, ECDSA,  ED25519  or
          RSA   authentication   identity   is   read.   The  default  is
          ~/.ssh/identity for  protocol  version  1,  and  ~/.ssh/id_dsa,
          ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for proto‐
          col version 2.  Additionally, any identities represented by the
          authentication  agent  will  be  used for authentication unless
          IdentitiesOnly is set.

Розумієте, є кілька спеціальних імен файлів, які намагаються спробувати, якщо не вказати ключ. Це також файли, які ви бачите у своєму журналі.

Для використання ключа у файлі з іншим іменем у вас є три варіанти:

  • вкажіть файл явно за допомогою наведеної вище -iопції.
  • налаштуйте файл у конфігурації вашого клієнта за допомогою наведеної вище IdentityFileопції.
  • додайте ключ до свого агента за допомогою ssh-add.

Для інтерактивних сесій агент є найбільш гнучким. Для вашої роботи з Cron -iваріант, мабуть, найпростіший.


26

Неправильно сформований файл дозволених ключів на хості призначення є ще однією причиною, коли ssh видає повідомлення "ми не надіслали пакет" і запитує пароль замість використання автентичності pubkey: -

debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method

Проблема в цьому конкретному випадку полягала в тому, що в даних відкритого ключа, які були вставлені в .ssh/authorized_keysхості призначення, відсутній перший символ: -

sh-rsa AAAA...

Рішенням було просто додати відсутні "s".

ssh-rsa AAAA...

І так: -

debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
...
debug1: Authentication succeeded (publickey).

2
дякую, щоразу, коли я отримую цю помилку, це тому, що мій файл з дозволеними ключами на віддаленому хості (сервері) неправильно сформований. Я б хотів, щоб помилка не звучала так, ніби з клієнтом виникла проблема.
— tamale

3
Вставлення у vim, не натискаючи спочатку "я"!
— Джордан Девідсон

Для мене це не виглядало неправильним, але я видалив файл і з вихідної машини я знову зробив ssh-copy-id, щоб відтворити його. Проблема вирішена.
— альварес

14

Цей точний рядок повідомлень про помилки у запитанні також може виникнути у випадку пропущеної пари приватних / відкритих ключів на локальній стороні . Ні, це не має сенсу, але я просто виривав волосся надовго, намагаючись зрозуміти, що відбувається.

  • Віддалена система A .ssh/mykey.pubскопійована в .ssh/authorized_keys.
  • Локальна система B має .ssh/mykeyправильний приватний ключ, який відповідає загальнодоступному ключу системи A, але також має .ssh/mykey.pubфайл, який є невідповідним, можливо, попередньою версією заміненого ключа.

SSH від B до A ( ssh -i mykey A) не вдасться із повідомленнями у запитанні, особливо, якщо ви -vvувімкнете клієнт ssh, ви побачите:

Пробуючи приватний ключ: .ssh / mykey
ми не надіслали пакет, вимкніть метод

Це брехня, оскільки фактичний ключ не був випробуваний, він, мабуть, використовував локальний файл відкритого ключа з відповідним ім'ям, щоб з'ясувати, чи можливо це спрацює, а потім насправді нічого не зробив, коли вони були невідповідними. Жодна кількість інформації про налагодження з обох сторін насправді не натякає на проблему.


Оце Так! Цей убив зовсім небагато часу і для мене! Втратили трохи волосся! Так що і в моєму випадку це було саме це, лише мій паб-ключ дійсно знаходився у файлі санкціонованих ключів на стороні клієнта, за винятком того, що він містив запис ім'я @ хоста в самому кінці, де мій sshd-хост цього не робив. Я не розумів, що вам потрібно відповідати дозволеним_кейтам на кожному кінці, насправді, я не думаю, що я ніколи раніше не відповідав їм. Ця проблема була лише тоді, коли мій клієнт був CentOS 7, підключившись до Ubuntu 12.04. Перехід із MacOS або інших систем Ubuntu працював чудово.
— gregthegeek

То як виправити цю проблему? Ви описували мою проблему Т. Моя проблема ще більше посилюється, оскільки я стрибаю між різними системами. Фактично вказівка ​​файлу для мене не працює
— Мадівад

@Madivad Ви вирішите проблему, встановивши відповідність публічним / приватним ключам локально (або взагалі немає відкритих ключів).
— Калеб

@Caleb Це звучить простіше, ніж це є, якщо (і я думаю, що копійка впала) це означає, що я повинен копіювати як публічні, так і приватні ключі до кожної системи, яку я хочу використовувати як клієнт SSH? Я спробував створити
— файл

Видалення осиротілого файлу id_rsa.pub на клієнті вирішило це для мене. Я щойно знову зіткнувся з цією проблемою на новому клієнті Centos 7, який підключається до сервера Ubuntu 12.04. Проблема санкціонованого_кейсу ім'я @ хоста не виправляла. Я зіставив каталоги, perms, точно той самий файл ключа id_rsa, але був додатковий id_rsa.pub (на стороні клієнта). Видалено, зараз він працює. Я запустив ssh-keygen для швидкого створення каталогів, а потім rsync з відомої гарної системи. Але це залишило додатковий файл паба, який не відповідав жодному приватному ключу (він не був у вихідному rsync). Я знову додав незрівняний паб-файл для підтвердження. Переконайтесь, що вони збігаються або видаляються.
— gregthegeek

5

Імена файлів за замовчуванням, які шукає ssh, є id_rsaі id_rsa.pub.

Якщо ви хочете використовувати інші імена файлів, ви повинні або вказати їх ssh_config( з допомогою IdentityFileпараметра) або через SSH командного рядка параметра -i.


4

У мене був такий самий випуск на RedHat; перевірив журнали та виявив, що домашній каталог має неправильні права користувача.

sshd[2507]: Authentication refused: bad ownership or modes for directory /home/user

Закріплення цього домашнього режиму вирішило це.


4
Ласкаво просимо на сайт U + L Stack Exchange. Ви можете зробити свою відповідь кориснішою для інших, подавши приклад того, як мають виглядати правильні дозволи.
— Ератьєль

У мене було дуже схоже питання, окрім ~/.sshрежисера. Принаймні, у Fedora 28, коли ~/.sshдозволи були 0775, я не міг зв’язатися із відкритими / приватними ключами. Тож я змінив дозволи на 0755 і працював як шарм :)
— PovilasB

3

Простий спосіб налагодження в Debian / Ubuntu: Підключення з паролем та хвостом журналу

хвіст -f /var/log/auth.log

Спробуйте підключитися з іншого терміналу, і ви побачите помилку ...

У моєму випадку каталог / root був 770, а не 700, що за замовчуванням. Помилка була "Відхилена автентифікація: неправильне володіння або режими для каталогу / root"

Виправте це, і ви закінчите.


Ти так сильно, чоловіче! ти врятував мій день!
— Антоній

Це допомогло з’ясувати це. Мій говорив, що користувач не підтримує 123.123.123.123, оскільки не вказаний у AllowUsers . Дуже дякую!
— aexl


0

Після бігу

ssh-copy-id user@remote-host

зазвичай це має працювати. Але якщо це не вдалося, спробуйте це: увійдіть до віддаленого хоста як користувача, у якого ви хочете ввійти у майбутнє та запустіть:

ssh-keygen

Це мені допомогло.


0

Тож у мене сталося те, що у мене є 2 VM для доступу з моєї локальної машини (2 клавіші id_rsa.pub та id_rsa2.pub). Я зрозумів, що моє ssh-з'єднання використовує id_rsa.pub за замовчуванням для будь-якого з'єднання ssh user@xx.xx.xx.xx. Я вирішив свою проблему, додавши файл конфігурації та вказавши ідентифікацію, яка повинна використовуватись для кожного хоста, наприклад:

vi ~/.ssh/config

Add both hostnames and their identity file as follows:

Host server1.nixcraft.com
  IdentityFile ~/Users/.ssh/id_rsa1
Host server2.nixcraft.com
  IdentityFile /backup/home/aymen/.ssh/id_rsa2

-2

клієнт:

vim /etc/ssh/ssh_config

#add your key 
IdentityFile ~/.ssh/yourkey

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