如何在paramiko connect中为交互式shell发送额外的arg,如“ssh t l user P.P.P D.D.D”?

2024-04-25 02:20:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一名网络工程师,对python不熟悉,我尝试了python/paramiko的一些程序[抱歉,如果我没有使用确切的技术术语]我感谢您的帮助和感谢。你知道吗

在代理服务器(不确定它是如何工作的)上有一个程序p.p.p.p,它接受我的SSH会话并将它中继到我想要登录的任何设备D.D.D.D

通常使用的SSH命令如下,它在D.D.D.D.D上调用一个交互式shell

    ssh -t -l user P.P.P.P D.D.D.D

如果我想执行一个命令并在设备上退出,那么我会执行下面的操作

    ssh -t -l username P.P.P.P D.D.D.D command_to_run_on_D_D_D_D

我想使用paramiko实现同样的功能,但是在p.p.p.p上调用交互式shell被拒绝,所以如果我连接到p.p.p.p并运行帕拉米科.斯维尔()我从P.P.P.P收到一条不允许的消息。(如果我只执行ssh-l用户P.P.P.P,结果也是一样的。这是预期的行为) 我不希望P.P.P.P上的shell,我希望D.D.D.D上的shell被调用。你知道吗

根据SSH文档,-t强制伪tty分配。这可以用于在远程机器上执行任意基于屏幕的程序,例如,在实现菜单服务时,这非常有用。多个–t选项强制分配,即使ssh没有本地tty。你知道吗

它在paramiko中的等价形式是exec_command(*args,**kwds)和get_pty(*args,**kwds)

所以我试过这个密码。你知道吗

    import paramiko
    import sys

    proxy = 'P.P.P.P'
    device = 'D.D.D.D'
    username = 'xxxx'
    ssh_client = paramiko.SSHClient()
    ssh_client.load_system_host_keys()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(hostname=proxy,username=username)
    stdin, stdout, stderr = ssh_client.exec_command(device, get_pty=True)
    stdin.write('sh ver | no-more\n')
    stdin.write('sh config | display set | no-more\n')
    stdin.write('show security flow session | no-more\n')
    for line in stdout:
        print line.strip("\n")

我把设备(D.D.D.D)作为一个命令传递给p.p.p.p,它选择了一个预期的参数来打开到D.D.D.D的中继会话,我从D.D.D.D获得了这三个命令的预期输出,但无法实现我真正想要的,那就是,能够在D.D.D.D上调用交互式shell,并使用它的send和recv方法。你知道吗


Tags: no命令程序clientparamikomorestdinusername