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

时间:2016-12-02 18:09:10

标签: python ssh pxssh

我正在尝试通过SSH使用pxssh连接到远程设备,但是其中一个设备是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.谢谢

3 个答案:

答案 0 :(得分:2)

调用login方法时,可以将port作为可选参数提供。

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

答案 1 :(得分:0)

由于没有其他人有任何想法,我通过移动pxssh.py文件中的port参数然后重新安排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)

答案 2 :(得分:0)

根据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)