在两个不同的端口上使用 pexpect pxssh 两次

using pexpect pxssh twice on two different ports

我正在尝试使用 pxssh 通过 SSH 连接到远程设备,但是其中一个设备是 SSH 端口 2222,一个是 22。我知道我可以将 pxssh.py 中的硬编码值更改为 22或 2222,但我不知道如何同时进行。

我查看了 pxssh login() 函数并尝试将 'port' 放在密码之后,因此在调用 pxssh 时我可以指定所需的端口,例如

pxssh.py 文件

def login (self, server, username, password='', port, terminal_type='ansi',original
            _prompt=r"[#$]", login_timeout=10,
            auto_prompt_reset=True, ssh_key=None, quiet=True,
            sync_multiplier=1, check_local_ip=True):

从我的文件调用 pxssh 登录

s.login(server, username, password, port) 

但是那个错误是

SyntaxError: non-default argument follows default argument

然后我想我可以复制 pxssh 并拥有 pxssh22.py 和 pxssh2222.py

if something:
     from pexpect import pxssh22
else:
     from pexpect import pxssh2222

每个都指定了不同的硬编码端口号,但是在调用时一直出错:

try:
    s = pxssh2222.pxssh()
    s.login(server, username, password)

except pxssh2222.ExceptionPxssh as e:
NameError: global name 'pxssh2222' is not defined

如何使用 pxssh 访问端口 2222 和 22。谢谢

由于没有其他人有任何想法,我通过移动 pxssh.py 文件中的端口参数然后重新安排 s.login 函数调用以包含端口来解决此问题。

修改pxssh.py文件

def login (self, server, username, port, password='', terminal_type='ansi',
            original_prompt=r"[#$]", login_timeout=10,
            auto_prompt_reset=True, ssh_key=None, quiet=True,
            sync_multiplier=1, check_local_ip=True):

修改登录调用以允许端口参数。

s.login(sshIP, "root", sshPort, sshPass)

您可以在调用 login 方法时提供端口作为可选参数。

  s = pxssh.pxssh()
  s.login(server, username, password, port=2222)

根据documentation,我们可以简单地使用默认参数和我们的意愿端口。

host = 127.0.0.1
user = root
password = toor

s.login(host,user,password, terminal_type='ansi', original_prompt='[#$]', login_timeout=10, port=2022)