LINUX.ORG.RU
ФорумAdmin

SSH: авторизация по ключу

 , ,


0

3

Добрый день!

Объясните пожалуйста, что я делаю не так. Мне Нужно настроить доступ с компа (Linux Mint) на мою плату (Embedded Linux, собранный Buildroot'ом. Работает OpenSSH) с помощью ключа и без пароля. В интернете есть много мануалов как это сделать, например как этот. Все делаю как написано, но все равно система запрашивает пароль. Пробовал отключать парольную авторизацию на сервере (настройка PasswordAuthentication), но система выдает Permission denied (publickey,keyboard-interactive).

Важный момент: на плате есть только один пользователь - root. Может это как-то влияет?


В самом банальном случае достаточно

ssh-copy-id root@ip
Если нестандартный порт, то
ssh-copy-id -p portnum root@ip
На запрос - ввести пароль, всё само скопируется на целевой сервер. При этом предполагается, что пара ключей на клиентской машине уже сгенерирована и лежит в положенном ~/.ssh/.
Если не взлетает - нужен выхлоп попытки залогиниться с -vvv, типа
ssh -vvv root@ip 
Да, и
# grep PermitRootLogin /etc/ssh/sshd_config
тоже.

Nirvandil ()
Ответ на: комментарий от onlybugs

Решил я сделать все сначала. На хосте генерирую пару ключей:

ssh-keygen -t rsa

Далее копирую публичный ключ на сервер (то есть плату):

ssh-copy-id root@192.168.2.2

Выдается такое текст:

silart@silart-desktop ~ $ ssh-copy-id root@192.168.2.2
The authenticity of host '192.168.2.2 (192.168.2.2)' can't be established.
ECDSA key fingerprint is 79:43:c9:3b:5b:bc:9c:48:8e:a9:dc:cd:db:9f:65:20.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.2.2's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.2.2'"
and check to make sure that only the key(s) you wanted were added.

Перезапускаю демон sshd и пробую зайти:

ssh root@192.168.2.2
Просто так не заходит, требует пароль.

Включаю диагностику:

ssh -vvv root@192.168.2.2

Выдается длинный лог.

Смущают следующие строки в нем:

debug3: Incorrect RSA1 identifier
debug3: Could not load "/home/silart/.ssh/id_rsa" as a RSA1 public key
...
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/silart/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Trying private key: /home/silart/.ssh/id_dsa
debug3: no such identity: /home/silart/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /home/silart/.ssh/id_ecdsa
debug3: no such identity: /home/silart/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /home/silart/.ssh/id_ed25519
debug3: no such identity: /home/silart/.ssh/id_ed25519: No such file or directory
debug2: we did not send a packet, disable method
debug3: authmethod_lookup keyboard-interactive

Почему-то он и не пытается загрузить мой ключ id_rsa. Вместо этого ищет id_dsa, id_ecdsa, id_ed25519.

Версия OpenSSH на сервере:

OpenSSH_7.4p1, OpenSSL 1.0.2k  26 Jan 2017

silart ()
Ответ на: комментарий от silart

debug1: Offering RSA public key: /home/silart/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: >publickey,password,keyboard-interactive

отсылает но не принимает

onlybugs ★★ ()
Последнее исправление: onlybugs (всего исправлений: 1)
Ответ на: комментарий от silart

останови на сервере sshd и запусти

/usr/sbin/sshd -d

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

onlybugs ★★ ()

да, с правами бывает засада: нельзя, чтобы $HOME был доступен на запись/чтение другими пользователями (или группой)

Sahas ★★★★★ ()
Последнее исправление: Sahas (всего исправлений: 2)
Ответ на: комментарий от man_of_motley

Sahas

Выполнил на сервере (плате) через терминал на uart:

chmod 0700 /home/root/.ssh
chmod 0600 /home/root/.ssh/authorized_keys

Но это не помогло.

да, с правами бывает засада: нельзя, чтобы $HOME был доступен на запись/чтение другими пользователями (или группой)

там нет других пользователей. Только root один. Правда $HOME у меня находится на другом разделе флэшки. Не знаю, влияет ли это.

silart ()
Ответ на: комментарий от anonymous

На клиенте покажи

drwx------  3 silart silart  4096 апр.  27 14:10 .
drwxr-xr-x 69 silart silart 12288 апр.  27 11:47 ..
-rw-------  1 silart silart  1766 апр.  27 11:48 id_rsa
-rw-r--r--  1 silart silart   403 апр.  27 11:48 id_rsa.pub
-rw-r--r--  1 silart silart   222 апр.  27 13:59 known_hosts
silart ()
Ответ на: комментарий от silart

я имел в виду, что каталог /home/root на сервере не должен быть открыт для чтения/записи другими, т.е. должны быть права 700 на него

Sahas ★★★★★ ()
Ответ на: комментарий от silart

Почему-то он и не пытается загрузить мой ключ id_rsa. Вместо этого ищет id_dsa, id_ecdsa, id_ed25519.

Проверь значения AuthorizedKeysFile и PubkeyAcceptedKeyTypes в sshd_config на плате.

dexpl ★★★★★ ()
Ответ на: комментарий от onlybugs

man_of_motley

Sahas

Запустил я sshd на сервере под отладкой. Это ключ -ddd.

Лог сервера здесь.

Там есть одна строка:

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

На сервере я делал:

chmod 0700 /home/root
chmod 0700 /home/root/.ssh
chmod 0600 /home/root/.ssh/authorized_keys

При этом вывод ls -la /home/root показывает:

drwx------    7 sshd     sshd          1024 Apr 26 17:29 .
drwxr-xr-x    5 root     root          1024 Apr 26 09:47 ..
-rw-------    1 root     root         12619 Apr 27 17:32 .ash_history
drwx------    3 root     root          1024 Apr 26 17:29 .cache
drwx------    3 root     root          1024 Apr 26 17:29 .config
drwx------    3 root     root          1024 Apr 26 17:29 .local
drwx------    2 sshd     sshd          1024 Apr 27 14:09 .ssh
drwxr-xr-x    3 sshd     sshd          1024 Apr 26 06:16 WebDriversim

Подскажите, что нужно еще сделать.

silart ()
Ответ на: комментарий от silart

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

chmod -R root:root /root/.ssh

К тому же, посмотри ssh -Q key на плате — если в списке нет того типа ключа, какой сгенерил тебе ssh-keygen, сгенери ключи подходящего типа.

dexpl ★★★★★ ()
Ответ на: комментарий от silart

у тебя владелец .ssh не root, а sshd, а заходишь ты из под root'а, видимо. Может, в этом дело? Поменяй владельца на root:

chown root:root .ssh
Sahas ★★★★★ ()
Ответ на: комментарий от Sahas

dexpl

joy4eg

man_of_motley

onlybugs

Nirvandil

Проблему решил! Спасибо вам, товарищи!

Я вставил строки

	mkdir -p /home/root/.ssh
	touch /home/root/.ssh/authorized_keys

	chown root:root /home/root -Rv
	chown root:root /home/root/.ssh -Rv
	chown root:root /home/root/.ssh/authorized_keys

	chmod 0700 /home/root
	chmod 0700 /home/root/.ssh
	chmod 0600 /home/root/.ssh/authorized_keys

в скрипт перед запуском sshd.

Объясните пожалуйста следующие моменты:

1. Откуда взялся пользователь sshd? Я его не создавал. Сборка Embedded Linux была сделана мной Buildroot'ом. И кроме рута там никого не было.

2. На хосте когда пытаешься зайти на только что перепрошитую плату выдается сообщение:

/usr/bin/ssh-copy-id: ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
ERROR: Someone could be eavesdropping on you right now (man-in-the-middle attack)!
ERROR: It is also possible that a host key has just been changed.
ERROR: The fingerprint for the ECDSA key sent by the remote host is
ERROR: f1:8b:f0:a8:f4:e6:bb:41:03:06:4f:3d:61:35:be:2e.
ERROR: Please contact your system administrator.
ERROR: Add correct host key in /home/silart/.ssh/known_hosts to get rid of this message.
ERROR: Offending ECDSA key in /home/silart/.ssh/known_hosts:1
ERROR:   remove with: ssh-keygen -f "/home/silart/.ssh/known_hosts" -R 192.168.2.2
ERROR: ECDSA host key for 192.168.2.2 has changed and you have requested strict checking.
ERROR: Host key verification failed.

Потом удаляешь known_hosts на хосте и все дальше работает. Можно ли как-то решить это без удаления?

silart ()
Ответ на: комментарий от silart

Я вставил строки

Это все достаточно выполнить всего один раз.

Откуда взялся пользователь sshd?

Это системный пользователь, ЕМНИП, его создает пакет openssh-server.

На хосте когда пытаешься зайти на только что перепрошитую плату выдается сообщение:

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

joy4eg ★★★★★ ()
Последнее исправление: joy4eg (всего исправлений: 1)
Ответ на: комментарий от silart

Можно ли как-то решить это без удаления?

ssh -o StrictHostKeyChecking=no root@192.168.2.2

dexpl ★★★★★ ()
Ответ на: комментарий от snaf

опиши как решил. Может кому то будет полезно

так описал уже. Проблема была с правами доступа.

silart ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.