Я пытаюсь выполнить команду sudo на удаленной машине, используя python-paramiko (Python 2.7.9 на linux2) Ниже приведен код. когда я выполняю код это дает различные результаты каждый раз, в то время как его работает нормально, когда я запускаю тот же код в питона >>> командная_строкаВыполнение команды на удаленном сервере, которая требует Sudo с вводом пароля - Paramiko
import paramiko
import sys
import time
def send_string_and_wait(command, wait_time, should_print):
shell.send(command)
time.sleep(wait_time)
receive_buffer = shell.recv(1024)
if should_print:
return receive_buffer
dbname='test'
cl='testdb'
host='testhost'
owner='uname'
passwd='p'
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(str(host), username=str(owner), password=str(passwd), port=22)
shell = client.invoke_shell()
send_string_and_wait("sudo su - oracle\n", 1, True)
send_string_and_wait(str(passwd) + "\n", 1, True)
a=send_string_and_wait("sh Validation_Final.sh" + str(' ') + str(dbname) + str(' ') + str(cl) + "\n", 0, True)
print a
client.close()
Любые рекомендации и предложения будут с благодарностью, спасибо вы!
Спасибо за ваш ответ, я пробовал с sudo -k, но не повезло. Интересно, что он работает, когда я жестко кодирует значения dbname и client, такие как ["" "send_string_and_wait ('sh /orashare/ettool/Validation_Final.sh dbname client' +" \ n ", 1, True)" ""] – Prince
Но я ' m перед проблемой при передаче переменных «" send_string_and_wait ("sh /orashare/ettool/Validation_Final.sh" + "" + str (dbname) + "" + str (cl) + "\ n", 0, True) " «Я предполагаю, что это должна быть проблема синтаксиса, пожалуйста, исправьте меня, если я ошибаюсь – Prince
Попробуйте выяснить, что именно вы получаете с удаленного сервера. Использование' -k' только гарантирует, что удаленный сервер ведет себя согласованно. Однако вы должны помнить, что при запросе пароля он не использует знак оболочки (например, '>' или '$'), поэтому, если paramiko ждет только один из них, он будет блокироваться. 'Пароль:' (или что бы он ни появлялся в вашей системе) считается знаком оболочки для этого вызова. – Mike