如何在 Linux(Fedora 10 和 CentOS 5.2)上允许 SSH 主机密钥

如何在 Linux(Fedora 10 和 CentOS 5.2)上允许 SSH 主机密钥

我正在尝试从基于 Mac OS X 10.5 Leopard Server 的中央备份服务器设置 SSH 主机密钥到运行 Fedora 10 和 CentOS 5.2 的两台 Linux 服务器。我们通常采取的流程有效并将密钥放在 ~/.ssh/authorized_keys 中,但它仍会提示输入密码。

我不是这些设备的常规管理员,我知道默认设置可能是禁用 SSH 主机密钥。如何启用 SSH 主机密钥?

更新:我已经在 /etc/ssh/ssd_config 中取消注释“PubkeyAuthentication yes”并运行service restart sshd,但不起作用。取消注释所有三行(“RSAAuthentication”、“PubkeyAuthentication”和“AuthorizedKeysFile”),更正 ~/.ssh 上的权限并重试。仍然没有结果。

当我运行时,ssh -v user@host在提示输入密码之前和出现一些 GSS 错误之后,我收到以下内容:

debug1: Next authentication method: publickey
debug1: Trying private key: /Users/shortname/.ssh/identity
debug1: Trying private key: /Users/shortname/.ssh/id_rsa
debug1: Trying private key: /Users/shortname/.ssh/id_dsa
debug1: Next authentication method: password

还有什么建议吗?

另一个更新:~/和 的权限~/.ssh/为 700。

我一直运行的创建主机密钥的命令如下:

cat /blah/ssh_keys_for_shortname/id_dsa.pub | ssh -l shortname -o stricthostkeychecking=no -i /blah/ssh_keys_for_shortname/id_dsa host.domain.tld 'cat - >> ~/.ssh/authorized_keys'

当我尝试连接时我使用:

ssh --verbose -l shortname -o stricthostkeychecking=no -i /blah/ssh_keys_for_shortname/id_dsa host.domain.tld

因此,显然我们正在使用 DSA 密钥。我尝试过重命名~/.ssh/authorized_keys2,但这没有帮助。

我希望将钥匙存储在其默认位置而不是/blah/ssh_keys_for_shortname/,但这超出了我的控制范围。

当我观看/var/log/audit/audit.log并尝试连接时,我得到以下信息:

type=CRED_DISP msg=audit(1249426114.642:128): user pid=10589 uid=0 auid=501 ses=14 msg='op=PAM:setcred acct="shortname" exe="/usr/sbin/sshd" (hostname=host.domain.tld, addr=192.168.1.149, terminal=ssh res=success)'
type=USER_END msg=audit(1249426114.647:129): user pid=10589 uid=0 auid=501 ses=14 msg='op=PAM:session_close acct="shortname" exe="/usr/sbin/sshd" (hostname=host.domain.tld, addr=192.168.1.149, terminal=ssh res=success)'
type=USER_LOGIN msg=audit(1249426129.524:130): user pid=10633 uid=0 auid=4294967295 ses=4294967295 msg='acct="shortname": exe="/usr/sbin/sshd" (hostname=?, addr=192.168.1.149, terminal=sshd res=failed)'

有什么建议吗?

答案1

看来你的基本知识是正确的。

我见过的最常见失败原因是远程authorized_keys文件及其上级目录的权限。在允许基于密钥的身份验证之前,sshd执行权限检查;如果结果不理想,则不允许身份验证。我通常设置~/.ssh为 0700 和~/.ssh/authorized_keys0600。我相信实际的 $HOME 也不能让组或世界写入,尽管读取是可以的。

如果仍然不能解决问题,下一步是在服务器端进行一些调试:

server$ /usr/sbin/sshd -d -p 2222

然后从您的客户端连接到“调试”服务器:

client$ ssh -v user@host  -p 2222

您将在服务器上获得丰富的调试信息stderr。我还没有遇到过无法从那里追踪的身份验证问题。

答案2

这是我将遵循的流程。

  1. 在 OS X 服务器上创建公钥/私钥对。出现提示时我没有指定密码。

    $ ssh-keygen -b 4096 -C “我的用户名@我的主机名” -t rsa

  2. 将 OS X 服务器上的 ~/.ssh/id_rsa.pub 内容复制到 CentOS/Fedora 主机上正确用户主目录中的 ~/ssh/authorized_keys。

  3. 验证所有主机上的权限是否正确。目录 ~/.ssh 应为模式 0700,其中的文件应为 0600(您可以将 0644 用于公钥,但限制性更强也无妨)。

如果基于密钥的身份验证尚未起作用,请验证在每个 CentOS/Fedora 主机上的 sshd_config 文件 (/etc/ssh/sshd_config) 中是否设置了以下值。(这些值应为默认值。)

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

如果仍然不起作用,请尝试ssh -v user@host查看连接时发生了什么。添加更多 v 以查看有关发生情况的更多详细信息。

编辑:尝试验证从 / 到相关 .ssh 目录的完整目录树的权限。如果该路径中的任何一个目录是组或世界可写的,SSH 将崩溃。运行此命令以打印出路径中所有目录的权限:

j="" ; for i in `echo ~baumgart/.ssh | sed 's%/% %g'` ; do ls -ld $j/$i ; j=$j/$i ; done

另外 - 检查日志文件中是否有来自 CentOS/Fedora 系统上的 sshd 的消息 - 应该有一条有用的消息来说明哪里出了问题。它应该在 /var/log/messages 或 /var/log/auth.log 中。如果找不到,请执行grep sshd /var/log/*

答案3

如果您已经正确设置了用户/组权限,则可能会遇到 SELinux 问题。解决此问题的最简单方法是使用restorecon -R /home/user/.ssh/。错误将被记录下来/var/log/audit/audit.log,您可以使用该audit2why工具让系统解释可能发生的任何 SELinux 拒绝。

答案4

/etc/ssh/sshd_config 中的‘PubkeyAuthentication yes’?

相关内容