问题描述
如何通过 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")