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


80

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

我通过安装了opensshd,apt-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
    

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

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


就我而言,我有两个AWS实例。其中一个正在正常工作,另一个在通过Intellij Idea连接时正在工作,但不是从Putty连接,而是在开始时工作。因此,就我而言,必须与腻子有关
MarianKlühspies2015年

Answers:


70

问题解决了:

看来我的公共密钥文件有问题。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它应该起作用。


1
authorized_keys在vi中打开并删除了所有换行符,然后它起作用了。
路加福音

1
公钥文件在哪里?我只用腻子。
希尔(Syler)'16

1
我已完成上述所有操作,但服务器仍在发送无可用的支持的身份验证方法(服务器发送了公钥)
Al-Alamin

您怎么知道这行不通/您在哪里找到了预期的格式?
迈克尔

当您说“将其粘贴到authorized_keys中,然后它应该可以工作时”,我需要在该位置准确粘贴。@ F21
Mahender Reddy Yasa

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

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

3b。更好地使用service sshd restart


事实上,这是非常有用的评论,如果你有麻烦连接VIE FTP软件
CNU

这对我行得通!
Asinox

8
通过密钥文件进行身份验证的整个目的是避免密码身份验证,因此实际上您应该将其设置PasswordAuthenticationno
Pere

这是唯一帮助我的答案。我不需要公钥/私钥身份验证,但是我收到了奇怪的消息。
Serge Rogatch

谢谢ChallengeResponseAuthentication,它在Debian 10.0上为我解决了问题
realtebo

10

我只是提示,希望对我头痛的人有帮助。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

希望能对某人有所帮助。


这对于4096位键不起作用...它超出了我认为的字符的终端限制
Freedo 2015年

1
之后将其从bash历史记录中删除可能不是一个好主意。
杰森·穆雷

@JasonPowersMurray:这是一个公共密钥。该公钥加密系统被设计为入住的时候,关键是公布的安全,所以没关系登录公钥在bash历史和其他地方。
戴维·卡里

9

我们已经在使用正确的密钥类型(用ppk代替pem)。

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

ssh对文件权限非常挑剔。


感谢您为我指明正确的方向。在我们的情况下,所有者和权限都是错误的。
Zsolti

由于我们无法通过ssh访问,如何更改文件权限?还有其他方法吗?
jit

1
我的也是所有权,群组关系和权限问题。如此处所示(stackoverflow.com/a/36808935/384670),我必须使用的权限是文件600和目录700。我还将所有者和组更改为该非root用户。
卡兹

5

解决了:

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

2
“确保私钥和公钥具有相同的路径。” 这与它无关。您不必到下一个驻留你的公钥到您的私人..
user3790897

5

在我的情况下,原因是私钥文件(.ppk)已在Putty身份验证代理(即Pageant)中删除。我只是再次将其更新到了Pageant,在那之后,连接非常正常。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.