无法使SSH公钥身份验证正常工作


41

我的服务器正在运行CentOS 5.3。我在运行Leopard的Mac上。我不知道是哪个原因造成的:

我可以通过密码身份验证正常登录到服务器。我已经完成了设置PKA的所有步骤(如http://www.centos.org/docs/5/html/Deployment_Guide-zh-CN/s1-ssh-beyondshell.html中所述)。我使用SSH,它甚至拒绝尝试公钥验证。使用命令

ssh -vvv user@host

(其中-vvv将详细程度提高到最大程度)我得到以下相关输出:

debug2: key: /Users/me/.ssh/id_dsa (0x123456)
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-with-mic,password
debug3: preferred keyboard-interactive,password
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password

然后提示输入密码。如果我尝试强制使用

ssh -vvv -o PreferredAuthentications=publickey user@host

我懂了

debug2: key: /Users/me/.ssh/id_dsa (0x123456)
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-with-mic,password
debug3: preferred publickey
debug3: authmethod_lookup publickey
debug3: No more authentication methods to try.

因此,即使服务器说它接受公钥身份验证方法,而我的SSH客户端坚持使用它,我还是被驳回了。(请注意,上面明显没有“提供公共密钥:”行。)有什么建议吗?

ssh 

只需使用“ ssh -v”,您就不需要更多的冗长性,并且包括整个输出,而不仅仅是您认为重要的行
cstamas,2009年

由于该问题已无法回答,并且正在吸引低质量的答案,因此该问题已被关闭。
HopelessN00b 2015年

Answers:


44

检查您的Centos机器是否具有:

RSAAuthentication yes
PubkeyAuthentication yes

在sshd_config中

并确保您对centos计算机的〜/ .ssh /目录具有适当的权限。

chmod 700 ~/.ssh/
chmod 600 ~/.ssh/*

应该可以。


1
正确的权限和文件名(有时为authorized_keys2,有时没有2)非常重要!
brandtaetter 2012年

4
文件authorized_keys的许可是非常重要的提示。谢谢。
凯恩2012年

7
chmod go-w ~/如果还不是这样,您可能还需要。
tylerl

1
还要检查您的远程服务器上的主目录是否具有权限755(如Jinjin Liu所述)
Attila Fulop 2013年

1
在其他操作系统中,SSH配置文件也可能位于以下位置:/etc/ssh/ssh_config
Yoshua Wuyts

17

我有一个类似的问题-远程PC无法使用公共密钥身份验证登录到CentOs 6服务器。在我的情况下,问题与SELinux有关-尝试登录的用户的主目录具有安全性消息。我通过使用该restorecon工具解决了这个问题:

restorecon -Rv /home

2
谢谢,加雷斯!“ restorecon -Rv /root/.ssh”很好地完成了这个技巧。
tbroberg 2012年

进一步说明:该命令告诉SELinux将文件下的SELinux标签重置为/home通常在目录布局中的文件/home
rakslice

如果您以root用户身份登录,则应该为restorecon -Rv /root
youfu

13

1-检查您的/ etc / ssh / sshd_config,确保您已经

RSAAuthentication是
PubkeyAuthentication是

2-检查来自远程计算机的安全日志,查找详细的sshd守护程序错误日志。例如在我的Ubuntu中

#grep'sshd'/ var / log / secure | grep“身份验证被拒绝” 尾巴-5
8月4日06:20:22 xxx sshd [16860]:身份验证被拒绝:错误的所有权或目录/ home / xxx的模式
8月4日06:20:22 xxx sshd [16860]:身份验证被拒绝:错误的所有权或目录/ home / xxx的模式
8月4日06:21:21 xxx sshd [17028]:身份验证被拒绝:错误的所有权或目录/ home / xxx的模式
8月4日06:21:21 xxx sshd [17028]:身份验证被拒绝:错误的所有权或目录/ home / xxx的模式
8月4日06:27:39 xxx sshd [20362]:身份验证被拒绝:错误的所有权或目录/ home / xxx的模式

然后检查目录/ home / xxx的所有权和模式,也许您需要运行此文件

chmod 755 /家庭/ xxx

1
检查系统日志文件是一个非常重要的提示。
凯恩2012年

1
755的主目录烫发帮助了我-绝对必要!
2013年

11

仔细检查本地和远程计算机的权限是否正确以及文件结构(特别是拼写)是否正确。您引用的URL可以说明所有内容,但是值得检查一下您是否匹配。通常,权限将引发相关错误。

您是否检查过CentOS 5.3框上的sshd_config是否设置为允许PubkeyAuthentication或RSAAuthentication?

检查CentOS系统上的SSH服务器日志-它可能会提供更多信息。我不确定CentOS是否像debian一样执行了列入黑名单的ssh密钥检查,但是就-vvv输出而言,我已经看到ssh公钥拒绝相对安静,但是日志清楚地解释了发生了什么


7

得到它了!原来这是一个客户端问题。(我认为任何服务器端问题都会产生更多有用的调试输出。)由于我不知道的原因,在我的Mac上,文件/ etc / ssh_config包含以下行:

PubkeyAuthentication = no

我注释了其中一行,现在一切正常。


4

除了文件/目录的模式外,请确保所有权正确!用户必须拥有自己的主目录,.ssh /和其中的文件。

我不得不跑chown -R $user:$user /home/$user过去克服我的ssh错误。


+1,对我的一个系统上的.ssh的权限是正确的,但有人做了该帐户的主目录777
GargantuChet

2

还要检查它是否可以自动提供密钥,如果没有,请使用-i path / to / key或只是进行测试


2

在我看来,这是一个配置问题。像丹尼尔(Daniel)建议的那样,有两件事要检查:

  1. SSH密钥$HOME/.ssh/authorized_keys可读。和
  2. SSHd配置为允许公用密钥登录。

2

使用您尝试登录的方式检查用户名。默认情况下,这是您在本地计算机上的用户名。


1

像这样的客户端输出ssh -v将显示协议中的某个步骤存在问题,但是当由于服务器上的某些原因而导致客户端无法得知原因时。检查服务器日志文件以找出问题所在。您可能需要root获得许可才能这样做。例如,对于sshd配置为登录到syslog的用户,您可能会在中找到消息/var/log/secure。像这些:

Authentication refused: bad ownership or modes for directory /home/you/.ssh
Authentication refused: bad ownership or modes for file /home/you/.ssh/authorized_keys

在这种情况下,原因是(愚蠢)默认default0002。就是说,对该组进行写访问。(Groupname =用户名,但仍然。)SSH守护程序将不信任那些可能被用户以外的其他人篡改的文件(root当然,和)。您可以使用解决问题chmod

chmod 700 ~/.ssh # solve the issue
chmod 720 ~/.ssh # reproduce the issue
# or similar for a file

1

我刚陷入使用fedora core 16 to cents 5.5的相同问题中

日志和详细看起来完全一样

问题是公钥,它得到了一些伪造的数据,将其重新生成并发布到sshd_server中,您sshd_client正在发送密钥信息,但服务器无法识别(它与authorized_keys中的任何密钥都匹配)


-2

另一个被这个咬了。经过长时间的搜索,原来我是在显式地向ssh提供ssh的公钥(带有-i选项)而不是私钥。h!

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.