使用子进程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")
答案 0 :(得分:0)
您可以通过指定 -t 选项强制进行伪tty分配。
subprocess.Popen(['ssh -t', hostname], .....
来自man ssh
-t
强制伪tty分配。这可用于在远程机器上执行任意基于屏幕的程序,这可能非常有用,例如,实现菜单服务时。多个-t选项强制tty分配,即使ssh没有本地tty。