我的设置
我有一组运行 Centos 7.3 的机器,并且使用 Kerberos / LDAP 进行身份验证。Kerberos / LDAP 已打包在 FreeIPA 4.4.0 中。
所有主机都有一个地址192.168.1.0/24。我将其称为“主要”网络。
有些主机的地址是192.168.2.0/24。我将其称为“辅助”网络。对于具有此第二个接口的主机,DNS 中有相应的额外 A / PTR 条目,用于关联辅助主机名和辅助 IP 地址。在所有情况下,辅助主机名都是<主主机名>-eth1。
我的目标
我正在努力在我们的集群中实现 SSO。SSO 在主网络上运行良好,但在辅助网络上则不行。
我目前所做的工作:服务器端
我对服务器进行了如下配置:
ipa-server-install \
-r ME.EXAMPLE.COM \
-n me.example.com \
--mkhomedir \
--hostname=host-1.me.example.com \
--ip-address=192.168.1.1 \
--ssh-trust-dns \
--setup-dns \
--auto-forwarders \
--forward-policy=only \
--auto-reverse \
--dirsrv-cert-file=<path to server SSL certificate> \
--http-cert-file=<path to server SSL certificate> \
--no-dnssec-validation
服务器安装完成后,我还必须手动将以下 PTR 记录添加到 DNS:
1.1.168.192.in-addr.arpa PTR host-1.me.example.com
我必须这样做,因为显然--自动反转标记为ipa 服务器安装不起作用(或者,更有可能的是,我不明白它)。
我目前所做的工作:客户端
我按如下方式配置了我的客户端机器:
ipa-client-install \
--force-ntpd \
-p admin \
-W \
--mkhomedir \
--no-nisdomain \
--ssh-trust-dns
与服务器安装一样,我还必须手动为客户端添加 DNS PTR 记录。FreeIPA 创建的正向 A 记录在所有情况下都很好。
然后,为了让辅助主机名注册到 FreeIPA,我在客户端执行以下操作:
kinit admin
ipa-join -h host-1-eth1.me.example.com
与以前一样,这会创建正向 DNS A 记录,但我必须手动添加相应的 DNS PTR 记录。
问题
我遇到的问题是在辅助网络上。例如,我可以通过 SSH 连接到主机-1以无密码方式(即 SSO 在主网络上工作),但我无法通过 SSH 连接到主机-1-eth1以无密码的方式(即 SSO 不在辅助网络上工作)。
SSH 可能会收到两个提示:
- 提示接受未知的 SSH 主机密钥
- 提示用户输入密码
当我使用辅助主机名通过 SSH 连接到主机时,系统不会提示我输入用户密码。这是提示我接受未知的 SSH 主机密钥,而当我尝试使用辅助主机名通过 SSH 连接到主机时,我无法绕过该提示。发生这种情况的原因是...
我观察到没有为辅助主机名生成 SSHFP DNS 记录。所有相同的 SSH 主机密钥都应与辅助主机名相关联,就像与主主机名相关联一样。然而,这并没有发生。
我必须如何使用 FreeIPA 来为辅助主机名生成所需的 SSHFP DNS 记录?显然,ipa-加入我正在做的是需要的。
答案1
可能不是您想要的答案,但我也考虑过 DNS 中的 SSHFP RR,但由于以下原因放弃了这个:
- 它需要客户支持(参见选项验证主机密钥DNS用于 OpenSSH 客户端)。
- 您需要使用 DNSSEC 签署您的 DNS 区域,并让本地解析器检查签名以确保真正安全。否则 DNS 记录很容易被伪造。
- 在一些较大的环境中,与负责 DNS 服务器的人员进行协调非常困难。请记住,如果您有许多 SSH 服务器,则需要动态 DNS 更新。
我强烈建议你研究一下OpenSSH 证书让受信任的证书颁发机构签署所有主机密钥。这也需要客户端支持(例如,PuTTY 不支持),并且您必须将 SSH-CA 的公钥分发给所有客户端。但它比 DNSSEC 更容易,而且在我看来更安全。