- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法在 Python Paramiko 中启动没有终端仿真的 shell?
exec_command
,但我确实需要一个交互式 shell。invoke_shell()
我得到一个终端并可以发出命令,但从 Windows 10 OpenSSH 服务器我得到一个带有 ANSI 转义序列的输出,包括 H
代码,其中不容易处理为纯文本。引用Decoding data from WIN10 ssh server (response of paramiko recv()) .最佳答案
Paramiko SSHClient.invoke_shell
打开“shell”SSH channel 。基本上只是执行用户默认 shell 的简写。否则它与 SSH“exec” channel (由 SSHClient.exec_command
使用)没有什么不同。
“shell”和“exec”SSH channel 都可以在有或没有终端仿真的情况下启动。只是 Paramiko SSHClient.invoke_shell
方法不提供该选项(而 SSHClient.exec_command
则通过其 get_pty
参数提供)。
有两种选择:
使用SSHClient.exec_channel
显式启动shell,例如
ssh.exec_command("/bin/bash")
在 Linux 服务器上,您甚至可以使用 SHELL
环境变量来避免对 shell 路径进行硬编码:
ssh.exec_command("$SHELL")
在 Windows 上可以使用 %CMDSPEC%
完成类似操作(未经测试)。
或者重新实现SSHClient.invoke_shell
以支持在没有终端模拟的情况下执行。
如果您查看SSHClient.invoke_shell
实现,它会:
chan = self._transport.open_session()
chan.get_pty(term, width, height, width_pixels, height_pixels)
chan.invoke_shell()
您所需要做的就是执行相同的操作,只需删除 Channel.get_pty
调用:
chan = ssh.get_transport().open_session()
chan.invoke_shell()
请注意,SSHClient.invoke_shell
始终使用终端模拟是有原因的。 SSH“shell” channel 的唯一目的是实现交互式 SSH 终端客户端(如 PuTTY)。没有终端仿真的终端客户端没有任何意义。
如果您想在没有终端仿真的情况下使用“shell” channel ,则表明您正在将其滥用于非设计目的。如果没有更好的解决方案来解决您想要做的事情,请三思!
关于python - 如何在 Python Paramiko 中启动没有终端仿真的 shell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57715388/
我是一名优秀的程序员,十分优秀!