使用子进程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")

最佳答案

通过指定-t选项,可以强制进行伪tty分配。

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

man ssh
 -t

强制伪tty分配。这可用于在远程计算机上执行基于屏幕的任意程序,这非常有用,例如在实现菜单服务时。多个-t选项强制tty分配,即使ssh没有本地tty。

09-30 11:30