Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: kandОтветов: 1

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

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

sshpythonsudosocketsparamiko

Ответы

Ответ 1 · рейтинг 3 · J.J.

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

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

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

requiretty

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы