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

mor*_*ant 4 linux ssh fedora centos hostkey

我正在尝试从基于 Mac OS X 10.5 Leopard Server 的中央备份服务器到运行 Fedora 10 和 CentOS 5.2 的两台 Linux 服务器设置 SSH 主机密钥。我们通常采取的流程是有效的,将密钥放在 ~/.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
Run Code Online (Sandbox Code Playgroud)

进一步的建议?

另一个更新:对权限~/~/.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'
Run Code Online (Sandbox Code Playgroud)

尝试连接时,我使用:

ssh --verbose -l shortname -o stricthostkeychecking=no -i /blah/ssh_keys_for_shortname/id_dsa host.domain.tld
Run Code Online (Sandbox Code Playgroud)

所以,显然我们正在使用 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)'
Run Code Online (Sandbox Code Playgroud)

建议?

Ins*_*yte 10

看起来你的基础知识是正确的。

我所看到的导致此失败的最常见原因是远程authorized_keys文件及其上方目录的权限。在允许基于密钥的身份验证之前,sshd执行权限检查;如果它不喜欢结果,则不允许进行身份验证。我通常设置~/.ssh为 0700 和~/.ssh/authorized_keys0600。我相信实际的 $HOME 也不能有 group 或 world 写入,尽管读取很好。

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

server$ /usr/sbin/sshd -d -p 2222
Run Code Online (Sandbox Code Playgroud)

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

client$ ssh -v user@host  -p 2222
Run Code Online (Sandbox Code Playgroud)

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