RedHat 6/Oracle Linux 6不允许通过ssh进行密钥认证

12

密钥已正确部署在~/.ssh/authorized_keys。

但是ssh仍然提示输入密码。


1
检查 /var/log/secure,如果公钥在认证中失败,则会有相应信息。很可能是 ~/.ssh 目录下的文件读写权限不正确。 - mguymon
在我的情况下,权限没问题。这是与SELinux相关的问题,请参见下文。 - Olivier Refalo
4个回答

29

几个问题,主要涉及权限,但也与RedHat 6上的SELinux有关

下面的脚本应该可以解决所有问题,请用您匹配的用户ID和组名替换<user>:<group>

chown -R <user>:<group> ~/.ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/*
restorecon -R -v ~/.ssh

3
即使文件位于受保护的目录中,也不应更改文件权限为全局可读。对我来说 restorecon -R -v $HOME/.ssh 很有用。 - feniix
是的,它应该只有所有者访问权限。在我的RHEL6盒子上仍然使用600。 - feniix
你的意思是我的建议不好吗?因为我看到你在回复中将文件的数量改成了600。 - feniix
1
忘记更新我的注释了,我拥有文件的权限错误(请注意chown的添加)。所以你的建议是可以的。 - Olivier Refalo
请注意,这仅适用于标准主目录。如果您将此更改应用于服务帐户或某些其他用户,其主目录不在/home中,则需要在restorecon之前添加以下命令(或在运行此命令后重新运行restorecon,并将path/to/service/home替换为完整的主目录路径):semanage fcontext -a -t ssh_home_t "/path/to/service/home/.ssh(/.*)?" - BamaPookie

6
我同意以上更改,对于大多数Linux变体,在root账户下运行都可以。 我曾经在RedHat 6.3上遇到过问题,尝试让postgres用户帐户使用DSA身份验证(在VirtualBox中运行6.3)。
问题可能在于基本的selinux权限不正确。在这种情况下,恢复con无法解决问题。
(After restorecon)
drwx------. postgres postgres unconfined_u:object_r:var_lib_t:s0 .ssh

我已经通过以下方式解决了这个问题:
chcon -R -t ssh_home_t .ssh

这解决了此问题的实例。


我已经搜索了三天才找到这个答案!直到我在授权密钥文件上运行stat命令时,我才注意到文件上有一个SELinux上下文。我将其与另一个用户的授权密钥文件进行比较,发现了差异!谢谢你,Greg! - BamaPookie
我发现了一个额外的要点:如果你随后在这个 .ssh 目录上运行 restorecon 命令,你将会失去使用 chcon 命令所做的更改。你需要添加一个策略,在文件系统重新标记时可以正确地重新应用上下文。我使用以下命令完成了这个操作:semanage fcontext -a -t ssh_home_t "/path/to/service/home/.ssh(/.*)?"。(请确保使用完整路径。) - BamaPookie
2
已更正的命令: semanage fcontext -a -t ssh_home_t "/path/to/service/home/.ssh(/.*)?" - BamaPookie

1
我也遇到了同样的问题,上面提出的解决方案对我没有用。总结一下上述指令:

  1. 检查目标系统上/var/log/secure日志文件中是否有错误详细信息。
  2. 用户~/.ssh目录中的文件权限应为600,并且文件所有者应为“user:group”。
  3. ~/.ssh目录的权限应为700,并且所有者应为“user:group”。
  4. 用户主目录即“~”(=“~/.ssh/..”)的权限应为755。如果权限为775,则我的系统中ssh密钥认证失败。

敬礼 布鲁诺


这个指令解决了你的问题吗?还是只是一个编译? - Nick Volynkin

0

上面的回答非常好,我有一个补充和建议。补充在下面第2行,即家目录权限不应比ssh密钥认证的rwxr-x---更宽松。

cd ~
chmod g-w,o-rwx .
chmod 700 .ssh
cd .ssh
chmod 600 *
chmod 644 authorized_keys
chmod 644 known_hosts
chmod 644 config
restorecon -R -v ../.ssh

建议在测试时使用-vv选项。

你可能是指“o-rwx”,而不是“u-rwx” :) - darkk
很好的发现!我在chmod/chown命令中经常混淆'u'和'o'。'o'代表'其他人',而不是'所有者'! - nortally

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接