2016-02-09 5 views
1

Я пытаюсь автоматизировать администрирование Linux с помощью модуля Python Paramiko ssh, все работает отлично, кроме sudo. Я следил за документацией paramiko для sudo, используя stdin.write() и stdin.flush(), но пока не повезло. Пожалуйста, помогите мне в этом.Python paramiko sudo не работает

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(host,username=uname,password=pwd) 
print('Successfully authenticated on'+ " " +host)    
print "\n" 
stdin,stdout,stderr = ssh.exec_command('sudo ls') 
stdin.write(pwd+'\n') 
stdin.flush() 
print stdout.readlines() 
ssh.close() 
+0

у вас возникли ошибки или нет вывода? – Nilesh

+0

я вмятина получить возможные неточности, я вижу, как показано ниже успешно прошел проверку подлинности на 192.168.1.19 [] –

+0

пожалуйста, попробуйте запустить ту же команду на консоли, у вас есть какие-либо штраф в этом? Это может произойти, если в текущем каталоге нет файла. – Nilesh

ответ

0

sudo ведет себя очень определенным образом в отношении TTY, на котором вы находитесь, чтобы сохранить свою идею безопасности. Существует опция командной строки для ввода приглашения на stderr и чтения с stdin, а не sudo, связанного с TTY напрямую.

Try:

stdin, stdout, stderr = ssh.exec_command('sudo -S ls') 

Если вы делаете это для задач системного администрирования, много рамок уже сделано. Вы можете взглянуть на Fabric, если вы счастливы писать python для большинства вещей или что-то вроде Ansible, чтобы все еще контролировать вещи за ssh, но пишите политику в более простом формате yaml.

+0

wow .. stdin, stdout, stderr = ssh.exec_command ('sudo -S ls') действительно работал. Большое спасибо за помощь –