Libs для работы с SSH - PullRequest
       25

Libs для работы с SSH

0 голосов
/ 01 декабря 2010

совет в библиотеку по работе с SSH. Основное требование - нормальная работа с утилитой sudo. Я уже попробовал и чем страдаю:

  • paramiko - вообще не может sudo, пытаясь после вызова обслужить пароль STDIN, но sudo пишет, что затем набирает:
  • pxssh - мммммм, очень медленно, очень очень медленно, неловко
  • ткань - может быть sudo только в том, что является идеальным миром, так как есть работа с разными пользователями и куда мне нужно отправить пароль?

Есть нормальные библиотеки, которые работают с sudo или нет?

Ответы [ 5 ]

0 голосов
/ 24 января 2017

У меня также были некоторые проблемы со скоростью входа в систему на pxssh.Я попытался использовать код, указанный выше, но все еще видел 10+ секунд только для входа в систему.Использование аргумента original_prompt устранило проблему для меня.Вы должны убедиться, что для original_prompt установлено то, что вы видите, когда впервые вводите ssh в машину, что в моем случае заканчивалось на «>».

0 голосов
/ 12 февраля 2016

Сначала у меня была такая же проблема с pxssh: она была очень медленной!
Вот способ, который я нашел, чтобы заставить его работать быстрее:

#!/usr/bin/python

import pxssh
import getpass

try:
    s = pxssh.pxssh()
    s.PROMPT = "#"
    hostname = raw_input('hostname: ')
    username = raw_input('username: ')
    password = getpass.getpass('password: ')
    s.login(hostname, username, password, auto_prompt_reset=False)
    s.sendline('ls')   # run a command
    s.prompt()             # match the prompt
    print(s.before)        # print everything before the prompt.
    s.sendline('ls -l /tmp')   # run a command
    s.prompt()             # match the prompt
    print(s.before)        # print everything before the prompt.
    s.logout()
except pxssh.ExceptionPxssh as e:
    print("pxssh failed on login.")
    print(e)

Ключевая часть - s.PROMPT = "#" и auto_prompt_reset=False в s.login().
Этот метод требует, чтобы вы знали шаблон приглашения (в моем случае это «#», я думаю, что атрибут PROMPT может быть установлен в регулярное выражение).

0 голосов
/ 01 декабря 2010

Вы можете настроить sudo для работы без реального терминала с параметром requiretty.Из руководства sudoers:

Если установлено, sudo будет работать только тогда, когда пользователь вошел в реальный tty.Это запретит такие вещи, как «rsh somehost sudo ls», так как rsh (1) не выделяет tty.Поскольку невозможно отключить эхо, когда tty отсутствует, некоторые сайты могут захотеть установить этот флаг, чтобы запретить пользователю вводить видимый пароль.Этот флаг по умолчанию отключен.

Это работает для меня с paramiko.В зависимости от того, что вы делаете, вы также можете посмотреть на что-то вроде pexpect .

0 голосов
/ 01 декабря 2010

Вместо того, чтобы заставлять sudo работать без tty, почему бы не заставить Парамико выделить вам TTY?

Распределение Paramiko и Pseudo-tty

0 голосов
/ 01 декабря 2010

Я думаю, что вы ищете ткань .

...