SSH 到目前主機並退出後遺失 Kerberos 票證

SSH 到目前主機並退出後遺失 Kerberos 票證

我正在 CentOS 7.3 上運行。

在以下情況下如何防止遺失 Kerberos TGT?

我了解註銷時不銷毀 Kerberos 票證的安全影響,我將更深入地研究這一點。但我想從最簡單的範例開始,如下所示。

[email protected]$ klist
klist: Credentials cache keyring 'persistent:25536700022:krb_ccache_h3j7qk7' not found

[email protected]$ kinit
Password for [email protected]:

[email protected]$ klist
Ticket cache: KEYRING:persistent:25536700022:krb_ccache_h3j7qk7
Default principal: [email protected]

Valid starting       Expires              Service principal
08/03/2018 17:06:45  08/04/2018 17:06:41  krbtgt/[email protected]

[email protected]$ ssh -K host
Last login: Fri Aug  3 17:06:21 2018 from 10.250.57.186

[email protected]$ klist
Ticket cache: KEYRING:persistent:25536700022:krb_ccache_h3j7qk7
Default principal: [email protected]

Valid starting       Expires              Service principal
08/03/2018 17:06:54  08/04/2018 17:06:41  krbtgt/[email protected]

[email protected]$ exit
logout
Connection to host closed.

[email protected]$ klist
klist: Credentials cache keyring 'persistent:25536700022:krb_ccache_h3j7qk7' not found

[email protected]$

更新#1

如下更新 SSH 伺服器配置可以解決所出現的問題:

GSSAPICleanupCredentials no

然而,無條件地這樣做是不可取的,因為它會產生負面的安全影響。完成操作後,將未過期的票據留在機器上是很危險的。

有關我們用例的更多詳細信息
我們使用 SSH 在遠端主機上執行命令。在遠端主機上執行的指令又可以使用 SSH 在其他主機上執行遠端指令。這都是腳本化/自動化的,因此我們不能允許輸入密碼的提示出現。這就是我使用的原因ssh-K。這-K標誌將您的 Kerberos TGT 轉發到您要透過 SSH 連線的主機,從而使您能夠從那裡透過 SSH 連接到另一台主機,而不會提示輸入密碼。

在我們的特定用例中,有時我們使用 SSH 執行命令的「遠端」主機之一就是我們已經所在的主機。如果沒有上面顯示的配置更改,在“remote”命令完成執行並且 SSH 會話退出後,Kerberos 票證將被銷毀 -在我們目前使用的機器上!然後我們就失去了以無密碼方式透過 SSH 連接到所有主機的能力。

為我們的用例尋找安全的解決方案
從而避免無條件的安全隱患不是在註銷時銷毀 Kerberos 票證,我想更深入地研究。

有沒有辦法執行以下任一操作?

  1. 只有當 Kerberos TGT 尚未駐留在您透過 SSH 連接到的電腦上時,才轉發它
  2. 僅在退出時銷毀您的 Kerberos 票證最後的外殼會話

還有其他我沒有考慮的可能性嗎?

答案1

我最終將以下內容放入我的 .bash_profile 中:

cleanup()
{
   SHELL_COUNT=$(ps -elf | grep bash | grep $(whoami) | grep -v grep | wc -l)

   if [[ "$SHELL_COUNT" -eq 2 ]]; then
      kdestroy -q
   fi
}

trap '
   cleanup
' 0

相關內容