我正在尝试将 SSH 主机密钥从基于 Mac OS X 10.5 Leopard Server 的中央备份服务器设置到运行 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)'
建议?
看起来你的基础知识是正确的。
我见过的最常见的失败原因是远程
authorized_keys
文件及其上方目录的权限。在允许基于密钥的身份验证之前,sshd
执行权限检查;如果它不喜欢结果,则不允许身份验证。我通常设置~/.ssh
为 0700 和~/.ssh/authorized_keys
0600。我相信实际的 $HOME 也不能有 group 或 world 写入,尽管读取很好。如果仍然不能解决问题,下一步是在服务器端进行一些调试:
然后从您的客户端连接到“调试”服务器:
stderr
您将在服务器上获得丰富的调试信息。我还没有遇到我无法从那里找到的身份验证问题。这是我要遵循的过程。
在 OS X 服务器上创建公钥/私钥对。提示时我没有指定密码。
$ ssh-keygen -b 4096 -C "myusername@myhostname" -t rsa
将 OS X 服务器上的 ~/.ssh/id_rsa.pub 的内容复制到 CentOS/Fedora 主机上正确用户主目录中的 ~/ssh/authorized_keys。
验证所有主机上的权限是否正确。目录 ~/.ssh 应该是 0700 模式,里面的文件应该是 0600(你可以使用 0644 作为公钥,但限制更多也无妨)。
如果基于密钥的身份验证还没有工作,请确认在每个 CentOS/Fedora 主机上的 sshd_config 文件 (/etc/ssh/sshd_config) 中设置了以下值。(这些值应该是默认值。)
如果它仍然不起作用,请尝试
ssh -v user@host
查看连接时发生的情况。添加更多 v 以查看有关正在发生的事情的更多详细信息。编辑:尝试验证从/到有问题的 .ssh 目录的完整目录树的权限。如果该路径中的任何一个目录是组或全局可写的,那么 SSH 就会崩溃。运行此命令以打印出路径中所有目录的权限:
另外 - 检查日志文件中来自 CentOS/Fedora 系统上的 sshd 的消息 - 这应该有一个关于问题的有用消息。它应该在 /var/log/messages 或 /var/log/auth.log 中。如果找不到,请执行
grep sshd /var/log/*
.如果您已经正确设置了用户/组权限,您可能会遇到 SELinux 问题。解决此问题的最简单方法是使用
restorecon -R /home/user/.ssh/
. 错误将被登录/var/log/audit/audit.log
,您可以使用该audit2why
工具让系统解释任何可能发生的 SELinux 拒绝。首先要指出的
/var/log/audit.log
是正在记录SELinux活动。我猜如果你再往后看一下那个日志,你会看到另一个看起来像这样的条目:
type=AVC msg=audit(xxxxxxxxx.xxx:xxxx): avc: denied { search } for pid=xxxxx comm="sshd" name="xxxxxx" dev=xxxx ino=xxxxxx scontext=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:default_t:s0 tclass=dir
这意味着您的 sshd 进程受到加载的 selinux 策略的限制,并且无法访问授权密钥文件所在的文件系统路径。
要验证 selinux 策略是否处于活动状态,请运行
sestatus
命令,您将看到以下输出:为了快速测试这是否是问题所在,您可以通过发出
setenforce permissive
命令暂时将 SELinux 设置为许可模式。执行此操作后,再次运行sestatus
,您应该会看到以下输出:再次尝试您的 ssh 连接,并且鉴于您的所有其他配置都是正确的,它应该可以工作。
展望未来,您可能应该创建允许访问您所追求的路径的自定义规则,但这超出了本帮助的范围。
要使此更改持久化(在重新启动后仍然存在),您需要修改
/etc/selinux/config
文件并更改:至
/etc/ssh/sshd_config 中的“PubkeyAuthentication yes”?