Используя pexpect pxssh дважды на двух разных портах

Я пытаюсь подключиться через SSH с помощью pxssh к удаленному устройству, однако одно из этих устройств - это порт 2222 SSH, а одно - 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. Спасибо

2 ответа

Решение

Поскольку ни у кого больше нет никаких идей, я исправил это, переместив аргумент порта в файл 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)

Согласно документации, мы можем просто использовать аргументы по умолчанию и порт нашей воли.

host = 127.0.0.1
user = root
password = toor

s.login(host,user,password, terminal_type='ansi', original_prompt='[#$]', login_timeout=10, port=2022)
Другие вопросы по тегам