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

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

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

我通过安装了 opensshd apt-get,并能够使用 putty 通过我的用户名和密码连接到服务器。

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

  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
    

当我使用 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

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

答案1

问题解决了:

我的公钥文件似乎有问题。PuttyGen 将创建一个如下所示的公钥文件:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20121022"
AAAAB3NzaC1yc2EAAAABJQAAAIEAhGF6GIuMY8FJ1+CNApnSY1N2YSlkYz72Yvwu
a6N1nFpBklz1+dsIMg4rcTLcF34M/tW5Yz+NUDAw2AEbxQ32FPgw7sAOIXktkYOH
tr7mmimiTjkoSCrJh1kqalPSpi8rglT/Bp67Ql2SZwvUFfMzHISryR0EZC4rXP/u
vObrJe8=
---- END SSH2 PUBLIC KEY ----

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

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAhGF6GIuMY8FJ1+CNApnSY1N2YSlkYz72Yvwua6N1nFpBklz1+dsIMg4rcTLcF34M/tW5Yz+NUDAw2AEbxQ32FPgw7sAOIXktkYOHtr7mmimiTjkoSCrJh1kqalPSpi8rglT/Bp67Ql2SZwvUFfMzHISryR0EZC4rXP/uvObrJe8= rsa-key-20121022

将其粘贴进去authorized_keys然后它就可以工作了。

答案2

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

3a. 重启 ssh /etc/init.d/ssh restart
或者
3b. 最好使用service sshd restart

答案3

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

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

echo [right-click-to-paste-here] > /etc/ssh/username/authorized_keys

最终你会得到这样的结果:

echo ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAhGF6GIuMY8FJ1+CNApnSY1N2YSlkYz72Yvwua6N1nFpBklz1+dsIMg4rcTLcF34M/tW5Yz+NUDAw2AEbxQ32FPgw7sAOIXktkYOHtr7mmimiTjkoSCrJh1kqalPSpi8rglT/Bp67Ql2SZwvUFfMzHISryR0EZC4rXP/uvObrJe8= rsa-key-20121022 > /etc/ssh/username/authorized_keys

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

echo ssh-rsa AAAAB3<...snip...>rJe8= rsa-key-20121022 >> /etc/ssh/username

希望这对某人有帮助。

答案4

解决了:

  1. 您需要下载 puttyGEN 并生成一个公钥和一个私钥。
  2. 我已经为我的私钥指定了密码。
  3. 然后在putty中配置私钥。Putty->SSH->Auth->浏览到你的私钥。
  4. 您需要在服务器上配置公钥。(就我而言,我已经与服务器人员交谈过,并询问他是否可以将我的公钥添加到服务器)。您需要连接另一端(服务器)的公钥。

相关内容