使用 Python 和 Paramiko 连接到自定义 SSH 子系统HP NonStop 上的 TACL 进程

问题描述

如何通过 Python 和 Paramiko 建立与 HP NonStop TACL 进程的直接连接,而不涉及任何 OSS 功能

在 HP NonStop SSH 手册中,我可以看到这个 (http://www.nonstoptools.com/manuals/FTP-SSH.pdf):

使用远程 SSH 客户端获取 TACL 提示

您也可以直接建立与 TACL 进程的连接,而不涉及任何 OSS 功能。 SSH2 作为 SSH2 子系统提供直接 TACL 访问。您可以通过指定使用 –s 选项和“tacl”作为子系统名称启动远程 SSH 客户端来连接到 TACL 子系统。与普通的 shell 会话一样,您必须指定 Guardian 用户 ID 和 IP 地址或主机名,其中 SSH2 作为 SSH 命令的参数进行侦听:

m.horst@np-dev02:~> ssh -s comf.mh@10.0.0.199 tacl    
comf.mh@10.0.0.199's password:    
TACL (T9205D46 - 19OCT2004),Operating System G06,Release G06.25.00    
(C)1985 Tandem (C)2004 Hewlett-Packard Development Company,L.P.    
cpu 1,process has no backup    
February 10,2006 13:09:41    
(Invoking $SYstem.SYstem.TACLLOCL)    
(Invoking $DATA1.MHHOME.TACLCSTM)    
Current volume is $DATA1.MHHOME    
1>

我的问题是如何通过 Paramiko 指定子系统名称 tacl

在 PuTTY 中是这样完成的:Connections -> SSH -> Remote command -> "tacl"

知道如何在 Paramiko 中做同样的事情吗?

解决方法

我的问题是如何通过 Paramiko 指定子系统名称 tacl

ssh = paramiko.SSHClient()

# authenticate here
chan = ssh.get_transport().open_session()
chan.invoke_subsystem("tacl")
stdin = chan.makefile_stdin("wb",bufsize)
stdout = chan.makefile("r",bufsize)
stderr = chan.makefile_stderr("r",bufsize)

在 PuTTY 中是这样完成的:Connections->SSH->Remote command->tacl

不,不是。 PuTTY 无法执行自定义子系统。因此,如果您可以在 PuTTY 中使用 tacl,则意味着您不需要使用子系统。在 PuTTY 中,您只需执行 tacl command

在 Paramiko 中,这很简单:

(stdin,stdout,stderr) = ssh.exec_command("tacl")