SSH 公钥 - 没有可用的受支持的身份验证方法(服务器发送的公钥)

F21*_*F21 105 server ssh

我在虚拟机中有一个 12.10 服务器设置,其网络设置为桥接(基本上将被视为连接到我的交换机的计算机)。

我通过安装 opensshdapt-get并且能够使用我的用户名和密码使用腻子连接到服务器。

然后我开始尝试让它使用公钥/私钥身份验证。我做了以下事情:

  1. 使用 PuttyGen 生成密钥。
  2. 将公钥移动到/etc/ssh/myusername/authorized_keys(我正在使用加密的主目录)。
  3. sshd_config像这样设置:

    PubkeyAuthentication yes
    AuthorizedKeysFile /etc/ssh/%u/authorized_keys
    StrictModes no
    PasswordAuthentication no
    UsePAM yes
    
    Run Code Online (Sandbox Code Playgroud)

当我使用 Putty 或 WinSCP 进行连接时,我收到一条错误消息,提示没有可用的支持的身份验证方法(服务器发送了公钥)。

如果我sshd在调试模式下运行,我会看到:

PAM: initializing for "username"
PAM: setting PAM_RHOST to "192.168.1.7"
PAM: setting PAM_TTY to "ssh"
userauth-request for user username service ssh-connection method publickey [preauth]
attempt 1 failures 0 [preauth]
test whether pkalg/pkblob are acceptable [preauth[
Checking blacklist file /usr/share/ssh/blacklist.RSA-1023
Checking blacklist file /etc/ssh/blacklist.RSA-1023
temporarily_use_uid: 1000/1000 (e=0/0)
trying public key file /etc/ssh/username/authorized_keys
fd4 clearing O_NONBLOCK
restore_uid: 0/0
Failed publickey for username from 192.168.1.7 port 14343 ssh2
Received disconnect from 192.168.1.7: 14: No supported authentication methods available [preauth]
do_cleanup [preauth]
monitor_read_log: child log fd closed
do_cleanup
PAM: cleanup
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何解决?

F21*_*F21 92

问题解决了:

看起来我的公钥文件有问题。PuttyGen 将创建一个公钥文件,如下所示:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20121022"
AAAAB3NzaC1yc2EAAAABJQAAAIEAhGF6GIuMY8FJ1+CNApnSY1N2YSlkYz72Yvwu
a6N1nFpBklz1+dsIMg4rcTLcF34M/tW5Yz+NUDAw2AEbxQ32FPgw7sAOIXktkYOH
tr7mmimiTjkoSCrJh1kqalPSpi8rglT/Bp67Ql2SZwvUFfMzHISryR0EZC4rXP/u
vObrJe8=
---- END SSH2 PUBLIC KEY ----
Run Code Online (Sandbox Code Playgroud)

但是,这行不通,所以您需要做的是在 PuttyGen 中打开密钥,然后从那里复制它(这会导致密钥的格式正确并在 1 行中):

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAhGF6GIuMY8FJ1+CNApnSY1N2YSlkYz72Yvwua6N1nFpBklz1+dsIMg4rcTLcF34M/tW5Yz+NUDAw2AEbxQ32FPgw7sAOIXktkYOHtr7mmimiTjkoSCrJh1kqalPSpi8rglT/Bp67Ql2SZwvUFfMzHISryR0EZC4rXP/uvObrJe8= rsa-key-20121022
Run Code Online (Sandbox Code Playgroud)

将其粘贴到authorized_keys然后它应该工作。

  • 我做了上述所有事情,但服务器仍然在发送 不支持可用的身份验证方法(服务器发送公钥) (2认同)

小智 35

  1. 编辑/etc/ssh/sshd_config文件。
  2. 更改PasswordAuthenticationChallengeResponseAuthenticationyes

3a. 重新启动 ssh /etc/init.d/ssh restart

3b。更好地使用service sshd restart

  • 通过密钥文件进行身份验证的全部目的是*避免*密码身份验证,因此实际上您应该将 `PasswordAuthentication` 设置为 `no`。 (18认同)

小智 14

只是一个提示,我希望可以帮助其他人解决我的头痛。F21是正确的,您需要将密钥复制到PuTTYGen窗口之外而不是保存文件,但是复制后,您粘贴的方式可能会对您的密钥是否有效产生重大影响。某些编辑器会在您粘贴时更改文本,或者使用换行符或使authorized_keys 文件无效的操作。

我发现最不可能破坏的是回显完整字符串并将输出重定向到文件。在 PuTTY 中右键单击以将密钥字符串粘贴到命令行,效果如下(使用上面给出的示例):

echo [right-click-to-paste-here] > /etc/ssh/username/authorized_keys
Run Code Online (Sandbox Code Playgroud)

你最终会得到这个:

echo ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAhGF6GIuMY8FJ1+CNApnSY1N2YSlkYz72Yvwua6N1nFpBklz1+dsIMg4rcTLcF34M/tW5Yz+NUDAw2AEbxQ32FPgw7sAOIXktkYOHtr7mmimiTjkoSCrJh1kqalPSpi8rglT/Bp67Ql2SZwvUFfMzHISryR0EZC4rXP/uvObrJe8= rsa-key-20121022 > /etc/ssh/username/authorized_keys
Run Code Online (Sandbox Code Playgroud)

这种方法的另一个优点是您可以通过使用 >> 附加而不是 > 覆盖来添加多个键,例如:

echo ssh-rsa AAAAB3<...snip...>rJe8= rsa-key-20121022 >> /etc/ssh/username
Run Code Online (Sandbox Code Playgroud)

希望能帮助某人。


小智 12

我们已经在使用正确类型的密钥(ppk 而不是 pem)。

在我们的例子中,服务器用户文件夹上的authorized_keys 的文件权限有问题。它必须是 -rw-r--r-- ... 它是 -rw-rw-r--

ssh 对文件权限非常挑剔。


小智 9

解决了:

  1. 您需要下载 puttyGEN 并生成公钥和私钥。
  2. 我已经为我的私钥分配了一个密码。
  3. 然后在putty中配置私钥。Putty->SSH->Auth->Browse to your private.
  4. 确保您的私钥和公钥路径相同。
  5. 您需要在服务器上配置公钥。(就我而言,我已经与服务器人员交谈并询问他是否可以将我的公钥添加到服务器)。您需要连接另一端(服务器)的公钥。

  • “确保您的私钥和公钥路径相同。” 那与它无关。您不必将您的公钥放在您的私钥旁边。 (2认同)

小智 7

就我而言,原因是私钥文件 (.ppk) 已在 Putty 身份验证代理(即 Pageant)中删除。我刚刚将它再次更新到那里的 Pageant,之后连接工作得很好。