@DVoropaev
Ставлю + к карме на хабре за ответы на вопросы

Почему paramiko неверно определяет статус подключения по ssh?

Вот этой функцией проверяю подходит ли логин/пароль:
def SSHCheck(target, SSHport, user, password):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    resultCode = 0
    try:
        ssh.connect(target, port = SSHport, username = user, password = password, timeout=5, banner_timeout = 5, auth_timeout=5)
    except paramiko.AuthenticationException:
        resultCode = 1
    except socket.error:
        resultCode = 2
    except paramiko.ssh_exception.SSHException:
        resultCode = 3
    finally:
        ssh.close()
    return resultCode

Все работает, когда подключаюсь к серверу, на котором OpenSSH.
Однако, если на сервере стоит Dropbear sshd 0.51 (protocol 2.0), то resultCode равен нулю (как будто подключение удалось) независимо от логина и пароля.
Чтобы отличить ложные срабатывания я решил каждый раз пытаться выполнить команду "ls" и смотреть результат. Для этого добавил блок else
def SSHCheck(target, SSHport, user, password):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    resultCode = 0
    try:
        ssh.connect(target, port = SSHport, username = user, password = password, timeout=5, banner_timeout = 5, auth_timeout=5)
    except paramiko.AuthenticationException:
        resultCode = 1
    except socket.error:
        resultCode = 2
    except paramiko.ssh_exception.SSHException:
        resultCode = 3
    else:
        channel = ssh.get_transport().open_session()
        channel.get_pty()
        channel.settimeout(5)
        channel.exec_command('ls')
        print(channel.recv(1024)) #Выводим результат команды
        channel.close()
    finally:
        ssh.close()
    return resultCode

Однако при каждой неудачной попытке входа paramiko пытался выполнить "ls", а в качестве результата команды выводилось примерно следующее:

b"\r\r\nEntering character mode\r\r\nEscape character is '^]'.\r\r\n\r\r\n\r\n\rlogin as: -c\r\n\rpassword: **"
  • Вопрос задан
  • 449 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы