Назад | Перейти на главную страницу

Аутентификация открытого ключа SSH не работает с PuTTY

Я создал виртуальную машину и установил Redhat 6. У меня проблемы с подключением с использованием аутентификации с открытым ключом.

Я могу использовать PuTTY на моем хосте Windows для подключения к гостевой системе redhat, где мне будет предложено ввести пароль. Я пытаюсь настроить аутентификацию с открытым ключом для пользователя root, поэтому я создал папку ~/.ssh с тем, что я считаю правильными разрешениями.

[root@redhat ~]# cd ~/.ssh
[root@redhat .ssh]# pwd
/root/.ssh
[root@redhat .ssh]# ls -la
total 16
drwx------. 2 root root 4096 Aug 21 16:28 .
dr-x------. 3 root root 4096 Aug 20 17:20 ..
-rw-r--r--. 1 root root  250 Aug 20 17:20 authorized_keys
-rw-r--r--. 1 root root  391 Aug 21 16:28 known_hosts

Я запускаю Pageant с загруженным закрытым ключом, он успешно работает с другими хостами, поэтому я не думаю, что это проблема.

Когда я пытаюсь использовать PuTTY для гостевой виртуальной машины, мне предлагается ввести пароль.

Если я проверил журнал событий PuTTY, я обнаружил следующие сообщения.

2012-08-21 17:29:41 Pageant is running. Requesting keys.
2012-08-21 17:29:41 Pageant has 1 SSH-2 keys
2012-08-21 17:29:46 Trying Pageant key #0
2012-08-21 17:29:46 Server refused our key

У меня включена пересылка агента, и я наткнулся на одну вещь: кто-то предложил запустить еще одну копию sshd в режиме отладки, что я и пробовал. (Я вырезал части вывода, чтобы сделать это несколько кратким).

[root@redhat ~]# /usr/sbin/sshd -d -p 2222
debug1: sshd version OpenSSH_5.3p1
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: read PEM private key done: type DSA
debug1: private host key: #1 type 2 DSA
<...>
debug1: Bind to port 2222 on 0.0.0.0.
Server listening on 0.0.0.0 port 2222.
<...>

На этом этапе я подключаюсь из другого сеанса на виртуальной машине с помощью команды ssh localhost -p 2222

<...>
Connection from ::1 port 36844
debug1: Client protocol version 2.0; client software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3
<...>
debug1: userauth-request for user root service ssh-connection method none
debug1: attempt 0 failures 0
debug1: PAM: initializing for "root"
debug1: PAM: setting PAM_RHOST to "localhost"
debug1: userauth-request for user root service ssh-connection method publickey
debug1: attempt 1 failures 0
debug1: test whether pkalg/pkblob are acceptable
debug1: PAM: setting PAM_TTY to "ssh"
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: trying public key file /root/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
debug1: matching key found: file /root/.ssh/authorized_keys, line 1
Found matching RSA key: <snip>
debug1: restore_uid: 0/0
Postponed publickey for root from ::1 port 36844 ssh2
debug1: userauth-request for user root service ssh-connection method publickey
debug1: attempt 2 failures 0
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: trying public key file /root/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
debug1: matching key found: file /root/.ssh/authorized_keys, line 1
Found matching RSA key: <snip>
debug1: restore_uid: 0/0
debug1: ssh_rsa_verify: signature correct
debug1: do_pam_account: called
Accepted publickey for root from ::1 port 36844 ssh2
debug1: monitor_child_preauth: root has been authenticated by privileged process
<...>

На этом этапе я успешно прошел аутентификацию, используя свой открытый ключ, и выхожу из системы, нажав Ctrl-D.

debug1: Received SIGCHLD.
<...>
Received disconnect from ::1: 11: disconnected by user
<...>
[root@redhat ~]#

Как ни странно, использования пересылки агента SSH было достаточно для успешной аутентификации против sshd, запущенного в режиме отладки, но не для «нормального» sshd, работающего на порту 22.

Есть ли у кого-нибудь идеи, почему это может быть?

Спасибо!

Контексты SELinux на вашем /root/.ssh каталог, скорее всего, неправильный.

Проверьте проблему с помощью:

ls -alZ /root/.ssh

Эти файлы должны иметь тип ssh_home_t.

Устраните проблему с:

restorecon -r -v /root/.ssh