通过 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 执行命令的“远程”主机之一就是我们已经在的主机。如果没有上面显示的配置更改,在“远程”命令执行完毕并退出 SSH 会话后,Kerberos 票证将被销毁——在我们当前所在的机器上!这样一来,我们就无法以无密码方式通过 SSH 连接所有主机了。

寻找适合我们用例的安全解决方案
以避免无条件的安全隐患不是在注销时销毁 Kerberos 票证,我想深入挖掘。

有没有办法做以下任一项?

  1. 仅当您通过 SSH 连接的计算机上尚未存在 Kerberos TGT 时才转发它
  2. 仅在退出时销毁您的 Kerberos 票证最后的shell 会话

还有其他我没有考虑到的可能性吗?

答案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

相关内容