You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Kerberos票据通过SSH执行命令及Jupyterhub场景Python实现

使用python-gssapi + Paramiko实现Kerberos认证的SSH远程执行

以下是满足需求的Python代码实现,涵盖通过用户名/密码获取Kerberos票据,并将其传递给Paramiko进行SSH认证、执行远程命令的完整流程:

import gssapi
import paramiko
from paramiko.gss_auth import GSS_AUTH

def get_kerberos_ticket(username, password, realm):
    # 构造Kerberos用户主体
    user_principal = f"{username}@{realm}"
    name = gssapi.Name(user_principal, gssapi.NameType.user)
    
    # 使用用户名密码获取凭证
    creds = gssapi.Credentials(
        name=name,
        usage='initiate',
        store={'password': password}
    )
    return creds

def ssh_with_kerberos(remote_host, kerberos_creds, command):
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    try:
        # 配置SSH连接使用GSSAPI认证,并传入已获取的Kerberos凭证
        ssh_client.connect(
            hostname=remote_host,
            gss_auth=True,
            gss_k5identity=None,  # 禁用默认的票据文件读取
            gss_deleg_creds=False,
            gss_creds=kerberos_creds  # 显式传递获取到的凭证
        )
        
        # 执行远程命令
        stdin, stdout, stderr = ssh_client.exec_command(command)
        output = stdout.read().decode()
        error = stderr.read().decode()
        
        return output, error
    finally:
        ssh_client.close()

# 示例调用
if __name__ == "__main__":
    # 配置参数
    USERNAME = "your_username"
    PASSWORD = "your_password"
    REALM = "YOUR.KERBEROS.REALM"
    REMOTE_HOST = "remote.server.com"
    COMMAND = "your_batch_command.sh"
    
    # 获取Kerberos票据
    kerberos_creds = get_kerberos_ticket(USERNAME, PASSWORD, REALM)
    
    # 执行远程SSH命令
    output, error = ssh_with_kerberos(REMOTE_HOST, kerberos_creds, COMMAND)
    
    print("命令输出:\n", output)
    if error:
        print("错误信息:\n", error)

关键步骤说明

  • 获取Kerberos票据:通过gssapi.Credentials直接使用用户名和密码生成凭证,无需依赖本地票据缓存文件,适合JupyterHub这类Web服务场景。
  • Paramiko GSSAPI认证:在connect方法中启用gss_auth=True,并通过gss_creds显式传入已获取的凭证,同时禁用默认的票据文件读取(gss_k5identity=None),确保使用指定的凭证进行认证。
  • 资源清理:通过finally块确保SSH连接被正确关闭,避免资源泄漏。

JupyterHub部署注意事项

  • 票据生命周期:Kerberos凭证有有效期限制,建议在每次执行远程任务前重新获取,或在凭证过期时自动刷新。
  • 安全控制:在JupyterHub中需严格隔离用户凭证,避免不同用户的Kerberos信息泄露,不要将密码硬编码到代码中,建议通过JupyterHub的用户认证系统获取安全的凭证输入。
  • 权限配置:确保远程服务器的SSH服务已启用GSSAPI认证,且用户主体拥有执行目标批处理任务的权限。

内容的提问来源于stack exchange,提问作者Hoeze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:52:24