gpt4 book ai didi

python - 使用 python shell 的 SSH 和 exec channel

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:45 26 4
gpt4 key购买 nike

我们已经为我们的硬件设备实现了一个 python shell,它只包含嵌入式 linux 上的 python cmd 模块。我们(非 root)用户的 shell 在/etc/passwd 和/etc/shadow 中设置为这个 python shell 的路径。下面的代码示例:

#!/usr/bin/env python

import cmd

class OurCmdProcessor(cmd.Cmd, object):

def __init__(self):
cmd.Cmd.__init__(self)

...

def cmdloop(self, intro = None):
"""Command loop.
Overrides cmd class cmdloop() method.
"""
signal.signal(signal.SIGINT, self._sigint_handler)
try:
cmd.Cmd.cmdloop(self, intro = intro)
except:
print("{} v2 exception!".format(branding))
#traceback.print_exc(file=sys.stdout)
sys.stdout.flush()

# This *exits* the cmd shell on exception
self.do_EOF()

def do_help(self):
print("Here is some help text!")

etc...

以前,我们的一位客户曾使用 SSH.NET 使用该库的 RunCommand 函数发出命令行命令,该函数设置标准的 SSH“exec”请求以通过 SSH 连接,然后解析输出和返回值. (即请求 channel 、 channel 成功、发送命令等。)

现在,那个调用不起作用,大概是因为我们已经从/bin/sh 切换到这个 python shell。有效的方法是使用该库的 SSH Shell 对象通过将命令文本后跟换行符来发送命令,然后扫描输出。

我要问的是,是否有可能在那个 shell 中实现一些东西来处理这个库发出的标准 SSH 'exec' 命令,或者在发出命令后执行命令时接收到的部分 shell 输出SSH shell 请求已经包含退出值了吗?我们不想将退出值作为命令可打印输出的一部分。

我们在嵌入式 Linux 设备上使用 dropbear SSH 服务器。

最佳答案

要在这种模式下工作,您的 Python 脚本应该能够解析其命令行参数,就像它解析以交互方式提供给您的 Cmd 实例的参数一样。

即:

./yourpython -c "some command"

应该以相同的方式工作:

./yourpython <<EOF
some command
EOF

...并且应该有一个退出状态来反射(reflect)上一个要执行的命令是否成功。


这等同于 ssh hostname 'some command' 在远程主机上运行 "${SHELL:-sh}"-c 'some command' 的方式。

关于python - 使用 python shell 的 SSH 和 exec channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45334151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com