SSH с моей локальной машины на хост Linux и sudo для пользователя root

Используется подпроцесс для ssh для хоста.

Вот фрагмент кода, который я использовал для ssh и запуска команд от имени моего пользователя. Когда я пытаюсь использовать команду sudo, я получаю ошибку, связанную с tty, а не с терминалом (что-то подобное)

 sshProcess = subprocess.Popen(['ssh', hostname], stdin=subprocess.PIPE, stdout = subprocess.PIPE, universal_newlines=True, bufsize=0)
sshProcess.stdin.write("hostname\n")
sshProcess.stdin.write("ls -ldr %s \n"%path)
sshProcess.stdin.write("pwd \n")
sshProcess.stdin.close()
for line in sshProcess.stdout:
 if line == "END\n":
 break
 print(line,end="")

Но я не могу бежать ниже команды

sshProcess.stdin.write("sudo su - serviceuser \n")

1 ответ

Вы можете принудительно назначить псевдо-tty, указав опцию -t.

subprocess.Popen(['ssh -t', hostname], .....

От man ssh

 -t      

Сила псевдо-тты выделения. Это может использоваться для выполнения произвольных программ на экране на удаленном компьютере, что может быть очень полезно, например, при реализации сервисов меню. Несколько опций -t заставляют tty выделяться, даже если ssh не имеет локального tty.

Другие вопросы по тегам