Відкритий ключ 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.