Парамико и судо

Я уже некоторое время искал в сетях решение моей проблемы, и безуспешно.

Моя проблема в том, что я не могу заставить команды sudo запускаться с paramiko.

Сначала я попытался просто использовать функцию SSHClient (). Exec_command (command) для выполнения команды sudo, но эта ошибка:

sudo: sorry, you must have a tty to run sudo

Затем, следуя совету этого сообщения: Как создать команду sudo с помощью Paramiko, пробовал вот так:

#self._ssh is the SSHClient object    
self._ssh.invoke_shell().exec_command(command)

Однако в большинстве случаев это просто дает мне:

File "pipelines/load_instance/ssh_tools.py", line 71, in executeCommand
    stdin, stdout, stderr = self._ssh.invoke_shell().exec_command(command)
  File "<absolute_path>/paramiko/channel.py", line 213, in exec_command
    self._wait_for_event()
  File "<absolute_path>/paramiko/channel.py", line 1084, in _wait_for_event
    raise e
paramiko.SSHException: Channel closed.

В другом, я бы сказал, в 40% случаев я получаю следующее:

File "<absolute_path>/paramiko/client.py", line 291, in connect
    sock.connect(addr)
File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 111] Connection refused

В качестве побочного примечания я пытаюсь запустить эти команды sudo на экземпляре Amazon Web Services EC2, поэтому я не понимаю, почему я получаю ошибку Connection Refused, поскольку каждый раз, когда я запускаю этот код, он появляется на новой новой пример...

Еще я использую paramiko 1.7.6.


person kand    schedule 26.04.2011    source источник


Ответы (2)


Это обычная проблема для последних дистрибутивов, которая влияет не только на paramiko. (Я столкнулся с этим на днях, когда обновил коробку с fedora2 до последней версии. Несколько скриптов управления ssh / sudo сломались)

Пока у вас есть доступ к удаленному хосту, вы можете редактировать /etc/sudoers и закомментировать строку: Defaults requiretty

Подробности на странице руководства sudoers:

requiretty

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

person J.J.    schedule 26.04.2011
comment
Здравствуйте, J.J., у меня точно такая же проблема, как и у kand. Если я правильно понимаю, тогда удаление флага requiretty должно решить проблему. Однако я по-прежнему получаю ту же трассировку стека, что и выше. Что я делаю неправильно? (Приносим извинения, если это неправильное место, чтобы спросить) - person Patrick; 24.07.2011
comment
Да, здесь тот же вопрос. На самом деле это не решает проблему для меня, и, в конце концов, этой строки по умолчанию нет даже в файле / etc / sudoers. - person lpapp; 10.12.2013

person    schedule
comment
Рассмотрите возможность добавления описания вашего кода. Это поможет будущим пользователям, посетившим этот пост. - person BusyProgrammer; 10.04.2017