Либы для работы с SSH

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

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

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


person Denis    schedule 01.12.2010    source источник
comment
Не могли бы вы немного переформулировать свой вопрос? sudo и ssh это разные вещи. Что вы ищете?   -  person Noufal Ibrahim    schedule 01.12.2010
comment
Все, что мне нужно, это просто подключиться к серверу по SSH и выполнить любую задачу из-под привилегированного аккаунта.   -  person Denis    schedule 01.12.2010


Ответы (5)


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

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

person Andrew Aylett    schedule 01.12.2010

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

person Kugel    schedule 01.12.2010

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

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

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

person Paulo Scardine    schedule 01.12.2010
comment
Почему бы вместо этого не выделить TTY? Смотрите ссылку в моем ответе. - person Andrew Aylett; 01.12.2010
comment
@Andrew Aylett: для автоматизации я использую SSH только с аутентификацией с открытым ключом, очень строгие sudoers User_Alias ​​с NOPASSWD (чтобы избежать открытого пароля внутри скриптов). Требовать выделения tty в среде, где я никогда не буду вводить пароли, — пустая трата времени. - person Paulo Scardine; 01.12.2010

Сначала у меня была такая же проблема с 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 может быть установлен в регулярное выражение).

person Nicolas Jean    schedule 12.02.2016

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

#!/usr/bin/env python

from pexpect import pxssh

host = 'hostname.domain'
user = 'username'
password = 'password'

terminal = pxssh.pxssh()
terminal.login(host, user, original_prompt='[>$]')
person G. Sorensen    schedule 24.01.2017