Открытый ключ 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:

   -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

Неправильно сформированный файл author_keys на хосте назначения является еще одной причиной, по которой ssh ​​выводит сообщение «мы не отправляли пакет» и запрашивает пароль вместо использования pubkey auth: -

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
спасибо, каждый раз, когда я получаю эту ошибку, это потому, что мой файл author_keys на удаленном хосте (сервере) искажен. Я хотел бы, чтобы ошибка не выглядела так, как будто была проблема с клиентом.
Тамале
3
Вставка в vim без нажатия 'i' первым!
Джордан Дэвидсон
Для меня это не выглядело неправильно, но я удалил файл и с исходного компьютера снова сделал ssh-copy-id, чтобы воссоздать его. Проблема решена.
Альварес
14

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

  • Удаленная система А .ssh/mykey.pubскопировала в .ssh/authorized_keys.
  • Локальная система B имеет .ssh/mykeyправильный закрытый ключ для сопоставления с открытым ключом системы A, но также имеет .ssh/mykey.pubфайл с ошибками, возможно, предыдущую версию замененного ключа.

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

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

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

Калеб
источник
Вот Это Да! Этот убил довольно много времени и для меня! Потерял немного волос! Так что в моем случае это тоже было так, только мой ключ публикации действительно был в файле author_keys на стороне клиента, за исключением того, что он включал запись name @ host в самом конце, где мой sshd host этого не делал. Я не осознавал, что вам нужно сопоставлять author_keys на каждом конце, на самом деле, я не думаю, что когда-либо сопоставлял их ранее. Это было проблемой только тогда, когда моим клиентом была CentOS 7, подключающаяся к Ubuntu 12.04. Переход с MacOS или других систем Ubuntu работал просто отлично.
gregthegeek
Итак, как вы решаете эту проблему? Вы описали мою проблему с T. Моя проблема еще более усугубляется, потому что я прыгаю между несколькими системами. На самом деле указание файла не работает для меня
Мадивад
@Madivad Вы решаете проблему, сопоставляя открытые / закрытые ключи локально (или вообще не используя открытые ключи).
Калеб
@Caleb Это звучит проще, чем если только (и я думаю, что пенни упал) это означает, что я должен копировать как открытый, так и закрытый ключи в каждую систему, которую я хочу использовать в качестве клиента SSH? Я пытался создать IdentityFile, но я, очевидно, неправильно его использую
Madivad
Удаление потерянного файла id_rsa.pub на клиенте решило это для меня. Я только что столкнулся с этой проблемой еще раз на новом клиенте Centos 7, подключающемся к серверу Ubuntu 12.04. author_keys name @ host проблема не решала проблему. Я сопоставил каталоги, perms, точно такой же файл ключа id_rsa, но там был дополнительный id_rsa.pub (на стороне клиента). Убрал, теперь работает. Я запустил ssh-keygen для быстрого создания каталогов, затем rsync из заведомо исправной системы. Но это оставило дополнительный файл pub, не соответствующий ни одному закрытому ключу (он не был в исходной версии rsync). Я повторно добавил непревзойденный файл публикации, чтобы проверить. Убедитесь, что подобраны или удалены.
gregthegeek
5

Имена файлов по умолчанию, которые ищет ssh, являются id_rsaи id_rsa.pub.

Если вы хотите использовать другие имена файлов, вы должны либо указать их ssh_config( с помощью IdentityFileпараметра) или через SSH командной строки параметра -i.

mreithub
источник
4

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

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

Исправление прав на домашний каталог решило эту проблему.

skywalkie
источник
4
Добро пожаловать на сайт U + L Stack Exchange. Вы можете сделать свой ответ более полезным для других, предоставив пример того, как должны выглядеть правильные разрешения.
Эратиэль
У меня была очень похожая проблема кроме с ~/.sshdir. По крайней мере на Fedora 28, когда ~/.sshразрешения были 0775, я не мог соединиться с открытыми / закрытыми ключами. Поэтому я поменял разрешения на 0755 и работал как прелесть :)
PovilasB
3

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

tail -f /var/log/auth.log

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

В моем случае каталог / root был 770, а не 700, что является значением по умолчанию. Ошибка была «Отказ в аутентификации: неправильное владение или режимы для каталога / root»

Исправьте это, и все готово.

Димитриос
источник
спасибо вам большое, чувак! ты спас мой день!
Энтони
Это помогло прояснить это. Мой говорил, что пользователь такой и такой от 123.123.123.123 не разрешен, потому что не указан в AllowUsers . Спасибо большое!
aexl
2

Пытаться

/sbin/restorecon -r /root/.ssh

Возможная проблема с продажным контекстом

Абдель Карим Матеос Санчес
источник
Я на Ubuntu и нет такого бинарника.
Шридхар Сарнобат
0

После запуска

ssh-copy-id user@remote-host

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

ssh-keygen

Это помогло мне.

mennanov
источник
0

Так что для меня произошло то, что у меня есть 2 виртуальные машины для доступа с моей локальной машины (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
李孝奎
источник