Centos
使用 AD 憑據時成功驗證後 SSH 斷開連接
我正在努力讓 SSH 接受 AD 憑據。伺服器詳情
- CentOS 8
- 伺服器已成功加入域
- Ran 領域發現哪個返回了有關我們的 AD 環境的正確資訊
- 領域許可執行以允許特定使用者
- SSH 配置文件稍作修改。它主要只阻止root登錄。
- 使用本地使用者帳戶通過 SSH 連接到伺服器有效。
- 使用 id someuser 可以查找使用者。我不需要附加 upn 後綴 (@ad.sample.com)。
行為
- 通過 SSH 登錄時,它會提示輸入使用者名(提供 AD 使用者名),然後是密碼(提供 AD 使用者密碼),在提供密碼後,SSH 會話會立即終止。我可以看到通過 /var/log/secure 日誌傳入的請求,並且可以看到憑據已被接受。一旦它通過身份驗證,會話就會立即關閉。我為使用者使用了錯誤的憑據進行了測試,並且可以看到安全日誌中報告了這一點,就像終端本身一樣。
- 我還測試了嘗試通過實際的伺服器控制台登錄,它最初似乎讓我進入,然後立即引導我重新登錄。
- SSH 調試的有趣之處在於 MOTD 是可見的。
- 當新使用者嘗試通過 SSH 登錄時,會創建他們的主目錄。
SSH 調試的部分輸出
someuser@x.x.x.x's password: debug3: packet_send2: adding 48 (len 72 padlen 8 extra_pad 64) debug2: we sent a password packet, wait for reply debug1: Authentication succeeded (password). Authenticated to x.x.x.x ([x.x.x.x]:xx). debug1: channel 0: new [client-session] debug3: ssh_session2_open: channel_new: 0 debug2: channel 0: send open debug1: Requesting debug1: Entering interactive session. debug1: client_input_global_request: rtype want_reply 0 debug2: callback start debug2: fd 3 setting TCP_NODELAY debug3: packet_set_tos: set IP_TOS 0x10 debug2: client_session2_setup: id 0 debug2: channel 0: request pty-req confirm 1 debug1: Sending environment. debug3: Ignored env XDG_SESSION_ID debug3: Ignored env HOSTNAME debug3: Ignored env TERM debug3: Ignored env SHELL debug3: Ignored env HISTSIZE debug3: Ignored env SSH_CLIENT debug3: Ignored env SSH_TTY debug3: Ignored env USER debug3: Ignored env LS_COLORS debug3: Ignored env MAIL debug3: Ignored env PATH debug3: Ignored env PWD debug1: Sending env LANG = en_US.UTF-8 debug2: channel 0: request env confirm 0 debug3: Ignored env HISTCONTROL debug3: Ignored env SHLVL debug3: Ignored env HOME debug3: Ignored env LOGNAME debug3: Ignored env SSH_CONNECTION debug3: Ignored env LESSOPEN debug3: Ignored env XDG_RUNTIME_DIR debug3: Ignored env _ debug2: channel 0: request shell confirm 1 debug2: callback done debug2: channel 0: open confirm rwindow 0 rmax 32768 debug2: channel_input_status_confirm: type 99 id 0 debug2: PTY allocation request accepted on channel 0 debug2: channel 0: rcvd adjust 2097152 debug2: channel_input_status_confirm: type 99 id 0 debug2: shell request accepted on channel 0 Activate the web console with: systemctl enable --now cockpit.socket Last login: Tue Jun 9 some date from x.x.x.x debug2: channel 0: rcvd eof debug2: channel 0: output open -> drain debug2: channel 0: obuf empty debug2: channel 0: close_write debug2: channel 0: output drain -> closed debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 debug1: client_input_channel_req: channel 0 rtype reply 0 debug2: channel 0: rcvd eow debug2: channel 0: close_read debug2: channel 0: input open -> closed debug2: channel 0: rcvd close debug3: channel 0: will not send data after close debug2: channel 0: almost dead debug2: channel 0: gc: notify user debug2: channel 0: gc: user detached debug2: channel 0: send close debug2: channel 0: is dead debug2: channel 0: garbage collecting debug1: channel 0: free: client-session, nchannels 1 debug3: channel 0: status: The following connections are open: #0 client-session (t4 r0 i3/0 o3/0 fd -1/-1 cc -1) Connection to x.x.x.x closed. Transferred: sent 2824, received 2420 bytes, in 0.1 seconds Bytes per second: sent 24722.5, received 21185.7 debug1: Exit status 1
我們的 sssd.conf
[sssd] domains = ad.sample.com config_file_version = 2 services = nss, pam [domain/ad.sample.com] ad_domain = ad.sample.com krb5_realm = AD.SAMPLE.COM realmd_tags = manages-system joined-with-adcli cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_id_mapping = True #use_fully_qualified_names = True use_fully_qualified_names = False #fallback_homedir = /home/%u@%d fallback_homedir = /home/%u access_provider = simple simple_allow_users = someuser
我已經檢查了幾篇關於設置的文章/部落格,我認為我沒有錯過任何東西。我應該提到我已經嘗試將 SSH 添加到 sssd.conf 文件的服務部分。它沒有任何區別。
有誰知道我還能檢查什麼?或者可能有什麼問題?
我終於能夠解決這個問題。有一個主要問題:
- 我的 SSSD 配置缺少定義使用者 shell 的值
我最初是通過以下文章收到此問題的警告:在 SSH 調試中突出顯示錯誤
具體來說,SSH調試中有以下行表明問題
client_input_channel_req: channel 0 rtype exit-status reply 0
根據此連結,這表明無法為使用者選擇外殼。
我檢查了我們的 AD 並填充了 loginShell 的屬性,但係統似乎不接受這一點。我將以下行添加到我的 /etc/sssd/sssd.conf 文件中
override_shell = /bin/bash shell_fallback = /bin/bash
一旦我添加了這些,我就可以使用 SSH 成功登錄。
然後我遇到了另一個問題,使用者主目錄沒有被創建。有一個 AD 屬性可以控制它,稱為 unixHomeDirectory。我們不會為所有使用者填充此內容,因此我也在 SSSD 配置中為主目錄添加了覆蓋。
override_homedir = /home/%u
SSSD 的最終配置如下所示:
[sssd] domains = example.com config_file_version = 2 services = nss, pam [domain/example.com] ad_domain = example.com krb5_realm = example.com realmd_tags = manages-system joined-with-adcli cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash override_shell = /bin/bash shell_fallback = /bin/bash ldap_id_mapping = True use_fully_qualified_names = False fallback_homedir = /home/%u override_homedir = /home/%u access_provider = simple simple_allow_users = someuser
要檢查的另一件事是您的 access.conf 文件。您描述的某些行為可以通過允許本地帳戶但拒絕其他帳戶的設置來完成,直到設置了有效的組或使用者。