我的設定
我有一個運行 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 更容易,而且恕我直言更安全。