从我的本地机器到 linux 主机和 sudo 到 root 用户的 SSH



使用子进程ssh到主机。

这是我用来以用户身份 ssh 和运行命令的代码片段。当我尝试使用 sudo 命令时,我收到与 tty 相关的错误 - 不是终端(类似的东西(

 sshProcess = subprocess.Popen(['ssh', hostname], stdin=subprocess.PIPE, stdout = subprocess.PIPE, universal_newlines=True, bufsize=0)
sshProcess.stdin.write("hostnamen")
sshProcess.stdin.write("ls -ldr %s n"%path)
sshProcess.stdin.write("pwd n")
sshProcess.stdin.close()
for line in sshProcess.stdout:
 if line == "ENDn":
 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。

相关内容

  • 没有找到相关文章

最新更新