как запустить команду sudo в модуле paramiko в скриптах python на удаленной машине

Мой сценарий: мне нужно войти в систему на удаленной машине, а затем выполнить sudo для другой учетной записи, например (sudo su anotheract), а затем запустить другую необходимую команду.

Но я могу успешно подключиться к удаленной машине, используя приведенный ниже сценарий. Но скрипты зависают в строке, где я выполняю команду sudo(sudo su anotheract)

Не могли бы вы помочь мне найти исправление для этого кода?

import paramiko

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(
    paramiko.AutoAddPolicy())

ssh.connect(hostname='XX.XXX.XX.XX',port=22, username='myname',password='XXXXX')

ssh.exec_command=("sudo su anotheract")

stdout,stdin,stderr=ssh.exec_command("java -jar /usr/share/XXX/LogR.jar")

print stdout.readlines()

person user1573644    schedule 03.08.2012    source источник


Ответы (3)


Один (не очень безопасный) способ сделать это — передать пароль. Предостережение заключается в том, что пользователь, которого вы используете для подключения к ящику с помощью paramiko, должен иметь права sudo.

Например:

supass = 'some_pass'

stdout, stdin, stderr = ssh.exec_command('echo %s | sudo -S anotheract' % supass)

Опять же, это не очень безопасная реализация, но она выполняет работу в один миг.

person KingJulian    schedule 10.08.2012
comment
Я попробовал ваш метод и получаю standard in must be a tty - person Yogeesh Seralathan; 26.08.2014
comment
@YogeeshSeralathan paramiko.SSHClient().exec_command('ваш cmd', get_pty=True) - person davegallant; 05.06.2017

import pxssh
ssh = pxssh.pxssh()
ssh.login('host', 'user', 'password')
ssh.sendline("sudo su anotheract")
ssh.prompt('yourrootpassword')

И в paramiko в большинстве Linux-систем вы не можете выполнять команды sudo, потому что sudo ожидает команд от tty, а затем это не исключение, но вы можете попробовать метод invokeshell, но я использовал paramiko много лет назад, я не помню, что с ним было не так. Если вы хотите отправлять различные команды в оболочке, вы можете использовать pxssh.

person Denis    schedule 03.08.2012
comment
привет пытался использовать PXssh, но не помогло из-за команды sudo, она зависла, та же проблема - person user1573644; 13.08.2012
comment
какая операционная система установлена ​​на вашей удаленной машине? - person Denis; 13.08.2012
comment
@denis Как это сделать, используя paramiko в Linux? - person Yogeesh Seralathan; 26.08.2014

Это может зависнуть, потому что sudo ждет пароль. Попробуйте добавить оператор NOPASSWD: в файл /etc/sudoers.

user    ALL = NOPASSWD: /bin/true

Также невозможно сменить пользователя с помощью su, а затем продолжать что-то делать после завершения su. Когда su завершится, вы вернетесь к исходной оболочке исходного пользователя.

Поэтому вам нужно запускать все команды с sudo:

stdout,stdin,stderr = ssh.exec_command=("sudo -u anotheract java -jar /usr/share/XXX/LogR.jar")
person Igor Chubin    schedule 03.08.2012
comment
спасибо за ваш ответ Привет, на самом деле NOPASSWD уже был в /etc/sudoers, я также проверил то же самое, т.е. если я запускаю команду вручную, выполняя SSH на удаленном сервере и запуская sudo su Anotheract, он не запрашивает пароль и все тщательно.сталкиваюсь с проблемой только через скрипт.. - person user1573644; 03.08.2012
comment
Очень хорошо, у нас вечеринка: Всем ROOT сегодня вечером - person Denis; 03.08.2012
comment
@Denis: Почему ты так думаешь? Как можно получить рут права для всех (и даже для user) с помощью этой строчки? Ты знаешь значение этой строки? - person Igor Chubin; 03.08.2012
comment
@Igor Chubin Хорошо, я не видел, что вы установили nopasswd в true, но все равно это не работает - person Denis; 03.08.2012
comment
@Денис: это работает; Я только что проверил это на своей системе. Но вернемся к вашей фразе «Все ROOT сегодня вечером»: почему вы написали «всех»? Где ты всех здесь видел? - person Igor Chubin; 03.08.2012
comment
привет, я столкнулся с той же проблемой, есть ли обходной путь для удаленного ssh и sudo или запуска любых других сценариев с использованием paramiko - person user1573644; 13.08.2012