您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

可以在有终端仿真或没有终端仿真的情况下启动“ shell”和“ exec” SSH通道。只是ParamikoSSHClient.invoke_shell方法不提供该选项(而SSHClient.exec_command通过其get_pty参数提供)。

有两种选择:

ssh.exec_command("/bin/bash")

在Linux服务器上,您甚至可以避免使用SHELL环境变量对外壳路径进行硬编码:

    ssh.exec_command("$SHELL")

在Windows上,使用%CMDSPEC%(未试用)可能会执行类似的操作。

如果看一下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”通道表示您正在 滥用 通道是 出于其非设计目的。 如果对您尝试做的事情没有更好的解决方案,请三思而后行!

python 2022/1/1 18:39:41 有306人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶