我有几个主机正在运行CentOS 7.3和OpenSSH 6.6.1p1和Kerberos 5 版本 1.14.1。
我的主机及其网络接口如下所示。主机按其“主”主机名列出,该主机名在 DNS 中与主机的单个 IP 地址相关联eth0网络接口。在具有多个网络接口的主机上,我还会给出与每个网络接口上的单个 IP 地址关联的 DNS 名称。
inf.example.com
- eth0:192.168.1.1/24
dev.example.com
- eth0:192.168.1.2/24
cluster-1.example.com
- eth0:192.168.1.11/24
- eth1:192.168.10.11/24(此辅助网络接口的 DNS A / PTR 记录使用主机名 cluster-1-a.example.com 设置)
cluster-2.example.com
- eth0:192.168.1.12/24
- eth1:192.168.10.12/24(此辅助网络接口的 DNS A / PTR 记录使用主机名 cluster-2-a.example.com 设置)
inf.example.com,即“基础架构”服务器,DNS、LDAP、Kerberos 密钥分发中心 (KDC) 等在此运行。这些项目都通过使用FreeIPA 版本 4.4.0。
dev.example.com是一个开发主机,开发人员可以从中运行使用 SSH 执行远程命令的脚本cluster-1.example.com。
运行的命令cluster-1.example.com反过来使用 SSH 在其他集群主机,但它通过其次要的网络接口(即通过其192.168.10.11(又名cluster-2-a.example.com) 网络接口)。
为了方便运行这些脚本,我正在尝试为 OpenSSH 完全设置单点登录 (SSO)。
一切正常,如果我使用192.168.1.0/24地址并使用-KSSH 标志将我的 Kerberos 票证授予票证 (TGT) 转发到我正在通过 SSH 连接的主机:
user@dev$ ssh -K cluster-1.example.com
user@cluster-1$ ssh -K cluster-2.example.com
user@cluster-2 $ # Everything worked! I was never prompted to accept an SSH host key or to enter a password!
然而,如果我尝试使用次要的在第二个 SSH 跳转的网络接口上,事情不会按预期进行(即以不需要人工交互的方式)。具体来说,会出现两个需要人工交互的提示:
- 系统提示我接受服务器的 SSH 主机密钥
- 系统提示我输入密码
这些问题如下所示:
user@dev$ ssh -K cluster-1.example.com
user@cluster-1$ ssh -K cluster-2-a.example.com
The authenticity of host 'cluster-2-a.example.com (<no hostip for proxy command>)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cluster-2-a.example.com' (RSA) to the list of known hosts.
Password:
这不起作用并不奇怪。尽管与辅助网络接口关联的 IP 地址和主机名在 DNS 中具有相应的 A 和 PTR 记录,但 Kerberos 中没有与辅助网络接口关联的 IP 地址和主机名的“注册”。
如何在 Kerberos 中正确配置具有多个网络接口 / 主机名 / IP 地址的主机,以允许 SSH SSO 使用任何主机的主机名 / IP 地址工作?
2018 年 7 月 31 日更新
inf.example.com(即 KDC)没有192.168.10.0/24网络。
它是否需要存在192.168.10.0/241)初次注册cluster-1-a.example.com和cluster-2-a.example.com或 2)正在进行的运营cluster-1-a.example.com和cluster-2-a.example.com?
或者,注册并操作辅助网络接口所需的所有 Kerberos 流量是否都可以通过主接口(即192.168.1.0/24网络)?
答案1
虽然与辅助网络接口关联的 IP 地址和主机名在 DNS 中具有相应的 A 和 PTR 记录,但 Kerberos 中没有与辅助网络接口关联的 IP 地址和主机名的“注册”。
好吧,那就让他们报名吧。
在每个多宿主服务器上,禁用严格的主体检查,并告诉它接受其密钥表中包含的任何密钥的票证:
全局(针对所有服务)
/etc/krb5.conf
(对于 MIT Kerberos;Heimdal 可能有不同的名称):[libdefaults] ignore_acceptor_hostname = true
记载于:
http://web.mit.edu/kerberos/krb5-latest/doc/admin/princ_dns.html#overriding-application-behavior http://web.mit.edu/kerberos/krb5-latest/doc/admin/conf_files/krb5_conf.html
或者仅适用于 SSH,在
/etc/ssh/sshd_config
(对于 OpenSSH):GSSAPIStrictAcceptorCheck no
记载于:
https://man.openbsd.org/sshd_config#GSSAPIStrictAcceptorCheck http://web.mit.edu/kerberos/krb5-latest/doc/admin/princ_dns.html#specific-application-advice
完成此操作后,将所有服务器名称的主体添加到 KDC,并将所有密钥添加到同一个
/etc/krb5.keytab
。 (对于已禁用名称规范化的客户端,您甚至可以添加短名称和/或 IP 地址的主体。)FreeIPA 似乎有一个名为“主要别名”的功能可以执行此操作,尽管我不确定它是否可以按需要在这里工作:
这可能不是仅有的方式,但这是最简单的,不涉及任何客户端配置。一切都像以前一样工作。
2018 年 7 月 31 日更新
inf.example.com(即 KDC)在 192.168.10.0/24 网络上不存在。
1) cluster-1-a.example.com 和 cluster-2-a.example.com 的初始注册或 2) cluster-1-a.example.com 和 cluster-2-a.example.com 的持续运行是否需要在 192.168.10.0/24 上存在?
不,不是。Kerberos 根本不关心子网 - 它只依赖于标准单播 TCP/UDP 通信工作。(例如,我的家庭实验室在三个不同的国家/地区拥有服务器和 KDC,通过公共互联网进行通信......)
事实上,服务器不与 KDC 通信一点儿也不。只有客户端才可以。服务器使用其本地密钥表来验证您的票证。
(当然,服务器将与您的 FreeIPA 目录服务通信,以通过 LDAP 查找帐户详细信息……但这不再是 Kerberos 的事情。)