SSH 公钥身份验证无法与 PuTTY 配合使用

SSH 公钥身份验证无法与 PuTTY 配合使用

我已经创建了一个虚拟机并安装了 Redhat 6。我在使用公钥认证进行连接时遇到了问题。

我可以在 Windows 主机上使用 PuTTY 连接到 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 访问 VM 客户机时,系统提示我输入密码。

如果我检查 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,但不能成功验证在端口 22 上运行的“正常” sshd。

有人知道为什么会这样吗?

谢谢!

答案1

您的目录上的 SELinux 上下文/root/.ssh很可能是错误的。

使用以下命令验证问题:

ls -alZ /root/.ssh

这些文件应该具有类型ssh_home_t

修复这个问题:

restorecon -r -v /root/.ssh

相关内容