ssh不再允许公共密钥身份验证


22

我的机器最近停止接受传入的公共密钥身份验证。我有一个从Windows计算机ssh进入的ubuntu 11.04桌面。我用腻子选美。我能够进行连接,但只能通过交互式密码身份验证进行连接,而不能通过已设置的rsa密钥进行连接。

我已经验证了密钥在〜/ .ssh / authorized_keys中列出。我该如何解决此问题以及如何检查?


2
首先检查的所有三个~~/.ssh并且~/.ssh/authorized_keys它们只能由您写(特别是没有组写权限)。查找在/var/log/auth.log尝试登录时创建的日志条目。将其复制粘贴到您的问题中(如果愿意,请编辑名称以保护隐私)。还要检查问题是否完全在服务器端:将私钥复制到Linux计算机上(您需要将PuTTY的私钥文件转换为OpenSSH格式),然后查看是否ssh localhost可行。
吉尔(Gilles)“所以,别再邪恶了”,

我的主目录由于某种原因可写。这样就解决了。把它当作答案,这样我就可以接受。
安德鲁·雷德

Answers:


28

如果公钥身份验证不起作用:确保在服务器端,您的主目录(~),~/.ssh目录和~/.ssh/authorized_keys文件都只能由其所有者写入。特别是,他们都不是该组可写的(即使用户独自在该组中)。chmod 755还是chmod 700可以,chmod 770不是。

出现问题时应检查的内容:

  • 运行ssh -vvv以查看大量调试输出。如果您发布问题询问为什么不能与ssh连接,请包括此输出(您可能希望匿名使用主机名和用户名)。
  • 如果可以,请检查服务器登录/var/log/auth.log
  • 如果公钥身份验证不起作用,请再次检查权限,尤其是组位(请参见上文)。


1
好答案!我忘了我的homedir:o
RobAu

如果您正在运行最新版本的ssh(或sshd),则由于安全问题,默认情况下将不再支持DSA密钥。唯一真正的解决方法是升级到RSA或更好的密钥。
Mikko Rantalainen

我更改了主文件夹的权限,该怎么办?我无法使用SSH!我更改了ssh密钥,不,服务器仍然拒绝连接!我很想找到解决方案,然后在将chmod 700答复到我的主文件夹中后,ssh开始工作了!!!!谢谢!如果在尝试找到解决方案时终端连接断开,那么我将被完全锁定在服务器之外。因此,请注意不要使用您的主文件夹权限!(我只是更改了主文件夹权限,而不是.ssh文件夹,但仍被锁定在SSH之外)
Tarik


5

如果检查目录的权限,则有一个“。”。在它们之后,您可能已经启用了selinux,它将与密钥交换混为一谈,并且默认为手动密码识别。

您可以按照以下说明禁用SELinux进行故障排除:http : //www.centos.org/docs/5/html/5.1/Deployment_Guide/sec-sel-enable-disable-enforcement.html,或仅编辑/ etc / selinux / config文件,并将其从“ enforcing”更改为“ disabled”。

希望这可以帮助。


我启用了selinux,但是禁用它似乎无法解决。对我来说,诀窍是chmod 600 ~/.ssh/authorized_keys-该文件可组写入。(viapyrosoft.co.uk/blog/2013/01/12/…)–
大卫·

这对我有帮助!谢谢!
2014年

通过设置正确的SELinux上下文,您还应该能够使用SELinux进行SSH身份验证。在主目录(restorecon ~ -R)上恢复系统配置的上下文是一个很好的起点。
Josh Kelley

4

我会确保您在/ etc / ssh / sshd_config中的设置正确。

要仅强制使用PKI并禁止密码,请找到该行

#PasswordAuthentication yes 

在文件中,取消注释并将其设置为

PasswordAuthenticate no

我还将仔细阅读设置的其余部分,以确保它们有意义。特别是,由于已知DSA被泄露,请尝试确保使用RSA密钥。


11
您正在说明如何禁用密码身份验证。这无助于使公共密钥身份验证工作(首先尝试使用公共密钥)。安德鲁:在确定公钥身份验证有效之前,请不要禁用密码身份验证!
吉尔(Gilles)“所以,别再邪恶了”,

2

造成此问题的一种可能原因是您拥有DSA密钥,但现在SSH(显然)默认为要求使用RSA密钥。升级到16.04时出现问题。您可以在此处看到更多信息,但简短的答案是将以下内容添加到~/.ssh/config

PubkeyAcceptedKeyTypes ssh-dss

1

我通过取消注释/ etc / ssh / sshd_config中的“ PasswordAuthentication yes”来解决此问题。


1

由于需要对两台不同机器之间的通信进行故障排除,因此我~/.ssh在客户端输入了两个私钥。

~/.ssh/identity我没有为每个服务器主机配置各自的私钥,而是为所有主机配置了辅助(在这种情况下是错误的)密钥:

Host *
IdentityFile ~/.ssh/identity_b

更正~/.ssh/identity解决了该问题:

Host a
IdentityFile ~/.ssh/identity_a
Host b
IdentityFile ~/.ssh/identity_b

0

我只是遇到了同样的问题,但是更改权限chmod没有帮助,因为事实证明我没有~/.ssh/authorized_keys文件的所有权。您可以使用以下命令更改.ssh目录的所有权:

sudo chown -R "$USER" ~/.ssh

-1

不知何故,这对我有用:

root @ kaiser:〜#vim / etc / ssh / sshd_config

将此行从yes更改为no 28 StrictModes否

再试一次

sysadmin @ suselinux1:〜> con sysadmin kaiser欢迎使用Ubuntu 12.04.1 LTS(GNU / Linux 3.2.0-25-generic i686)

上次登录时间:2012年11月1日星期五10月13日15:40:11 sysadmin @ kaiser:〜$ date vie nov 9 17:53:11 CST 2012 sysadmin @ kaiser:〜$


3
做某事而不知道它的作用以及为什么会起作用可能是可以接受的,但暗示这样做是不好的,并且公平地说,如果涉及到安全系统,那就更糟。
Mahesh 2012年

2
同意 让这成为创建更好sshd文档的动机,而这些文档并不会完全属于“不错的星期六阅读”类别
code_monk 2014年
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.