将 Kerberos 身份验证与 Paramiko 结合使用

Using Kerberos authentication with Paramiko

我正在努力弄清楚如何通过 python 和 paramiko 使用 kerberos 身份验证。我找到了 paramiko 的文档,但不知道如何实现它,而且似乎缺少专门针对 kerberos 和 paramiko 的教程,因为它太新了。

当我在 python 之外使用 ssh 进行正常使用时,我插入智能卡并从 OSX Mavericks 中的命令行输入以下内容...

$ kshell
$ pkinit

...然后提示我输入与该卡关联的密码。从那里我得到一张 kerberos 票证并且可以通过 ssh 连接到服务器。

我过去使用过 paramiko,但没有使用 kerberos...下面的代码是我尝试过的示例,但我遇到错误并且无法连接。

import paramiko
import gssapi

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname = 'my.server.name',
        username = 'user.name',
        gss_auth = True,
        gss_kex = True)

正如 How does Kerberos work with SSH? 所说,如果服务器在可用的身份验证机制中报告 gssapi-with-mic,则 SSH 中的 Kerberos 身份验证本质上是一些自定义数据传输而不是常规身份验证(包括从 KDC 获取票证)。

对它的支持 paramiko 已于 2014 年 9 月 pull request 267 提交,并且从 v1.15 开始可用。

要使用它,

  1. 有关其他要求,请参阅 Installing docs
  2. 使用 SSHClient.connectgss_auth 参数。 gss_kex 可选择使用 Kerberos 而非其 SSH 密钥对服务器进行身份验证。