栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Python Paramiko中启动没有终端仿真的shell?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Python Paramiko中启动没有终端仿真的shell?

Paramiko

SSHClient.invoke_shell
打开“
shell” SSH通道。基本上,这只是执行用户默认Shell的简写。否则,它与SSH“
exec”通道(由使用
SSHClient.exec_command
)没有什么不同。

可以在有终端仿真或没有终端仿真的情况下启动“ shell”和“ exec”
SSH通道。只是Paramiko

SSHClient.invoke_shell
方法不提供该选项(而
SSHClient.exec_command
通过其
get_pty
参数提供)。

有两种选择:

  • 用于
    SSHClient.exec_channel
    显式启动外壳,例如
    ssh.exec_command("/bin/bash")

在Linux服务器上,您甚至可以避免使用

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”通道的唯一目的是实现交互式SSH终端客户端(如PuTTY)。没有终端仿真的终端客户端毫无意义。

您想要不使用终端仿真而使用“ shell”通道表示您正在 滥用 通道是 出于其非设计目的。
如果对您尝试做的事情没有更好的解决方案,请三思而后行!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/659752.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号