- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
那么 SSHClient.exec_command()
和在 Paramiko 上使用 SSHClient.invoke_shell
发送有什么区别?
我可以使用 exec_command
向 MikroTik 路由器设备发送和执行命令,但不能使用 send
(invoke_shell()
) 执行它。
另一方面,我可以向 Cisco 设备发送和执行命令 send
(invoke_shell()
),但无法使用 exec_command< 执行它
.
我说的命令是路由(ip route xxx xxx)或者make vlan或者add an ip address等配置命令。
最佳答案
区别在于invoke_shell
使用SSH shell
channel ,而exec_command
使用SSH exec
channel 。
作为用户/开发人员,这对您真正意味着什么取决于 SSH 服务器,而不是 Paramiko 本身。
通用 *nix OpenSSH 服务器:
shell
channel 执行登录 shell(就像您使用 SSH 终端客户端登录一样)。然后 shell 将显示命令提示符并等待客户端/用户键入命令。 shell
channel 的目的是实现交互式 shell session 。所以基本上它的合法用途是 SSH 终端客户端的实现。这是一个人很少会做的事情。如果这样做,您通常希望使用 terminal emulation (Paramiko invoke_shell
无条件地执行此操作,但实际上可以在没有终端仿真的情况下打开 shell
channel )。
在正常情况下,shell
channel 显然由 SSH 终端客户端(如 OpenSSH ssh
或 PuTTY)使用。
shell
channel 是一个带有输入和输出的黑盒子。输入和输出没有结构。例如,如果您通过将命令发送到输入来执行命令,您将永远无法知道它何时结束。如果您将两个命令发送到输入队列,您将无法区分哪个输出来自哪个命令。
exec
命令将命令作为“参数”并在隔离环境中执行它 – 仍然通过用户的默认 shell,而不是作为“登录”shell,这可能导致命令执行的显着差异。
有关此类差异的典型示例,请参阅 Some Unix commands fail with "<command> not found", when executed using Python Paramiko exec_command .
exec
channel 的目的是自动执行命令。所以通常你不想使用终端仿真,以避免命令做一些花哨的事情,比如分页、着色和主要是交互式确认。这就是 get_pty
的默认值为 False
的原因。
OpenSSH ssh
或 PuTTY plink
使用 exec
channel ,当您指定要在其命令行上执行的命令时:
ssh user@host command
对于不太常见的 SSH 服务器,差异可能更加显着。有些服务器甚至可能不支持其中一个 channel 。同样很常见的是,它们似乎同时支持两者,但其中一个(通常是 exec
)已完全损坏。
参见 Executing command using Paramiko exec_command on device is not working .
Java/JSch 也有类似的问题:
What is the difference between the 'shell' channel and the 'exec' channel in JSch
关于python - Paramiko 上的 exec_command 和使用 invoke_shell() 发送有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55762006/
我不是 C 程序员。有什么想法吗? 这是我尝试过的安装命令: pip install paramiko sudo pip install paramiko 输出: src/_fastmath.c:15
Importing paramiko throws following exception on Python3. Traceback (most recent call last): File
我正在编写一个 Python 脚本,需要下载远程 xml 文件来解析它。 我正在使用 paramiko。 这是脚本: def copyFile(ip, user, pwd, remotePath, l
好的,所以我正在尝试在我的 python 脚本中实现 paramiko。 目的是连接同一局域网内的另一台PC,通过python执行命令。 我的 python 版本: Python 2.7.6 (def
我正在调试一些代码,这将导致我不断地登录/退出一些外部 sftp 服务器。有谁知道如果代码中出现非 paramiko 异常,paramiko 是否会自动关闭外部服务器上的 ssh/sftp sessi
我不断收到以下错误: Traceback (most recent call last): File "/home/d/workspace/paramiko/connect_test/main.p
我正在尝试通过 SSH 从 Python 远程执行命令,在这种特殊情况下需要将 stdin 重定向到/dev/null。 也就是说,与使用带有 -n 标志的 OpenSSH 客户端相同: ssh -n
当我尝试打开 mysql 工作台时,它显示“导入错误:没有名为 paramiko 的模块;操作失败:无法启动 SSH 隧道管理器”,尽管我已经安装了 paramiko。我正在使用 python 2.7
我正在尝试使用 paramiko 通过 netcat 反弹 SSH session : MyLocalMachine ----||----> MiddleMachine --(netcat)-->
我目前正在开发一个程序,该程序尝试联系运行 Cisco IOS 的众多路由器以获取其当前配置。我正在尝试使用 Paramiko 模块的 SSHClient 来实现这一点目的: def get_conf
我有基于 paramiko 模块的 python 2.7 代码,我想将其移植到 python 3.3,但我似乎找不到可以工作的 paramiko 版本或合适的替代版本。 我需要该模块在 Windows
我正在尝试运行使用 SSHLibrary 的机器人框架测试用例。我已经安装了所有必需的库(在本例中为 paramiko)。但我仍然收到此错误。 我得到的错误是: Error in file '/opt
有什么方法可以在后台运行 mysql 命令或保持连接事件一段时间,以便可以对其执行查询。可以用nohup来实现吗?如果是,怎么办? 最佳答案 是的,你可以用ajax来做到这一点 使用Nohup你可以做
我正在尝试在 python 中使用 paramiko 执行一个简单的代理命令。 基本上我正在尝试复制此 ssh 命令的行为: ssh -i ~/.ssh/destination_key user@de
This question already has answers here: Pass input/variables to command/script over SSH using Python
Paramiko 支持基于证书的身份验证吗? connect 方法中的 key_filename 提到它同时支持私钥和证书,这里的证书是指基于证书的身份验证吗? key_filename (str)
我刚刚尝试与 paramiko 进行 ssh 连接。一切看起来都很好,但在最后一步,当调用 close() 方法断开客户端连接时。 这是我的脚本: #!/usr/bin/python import p
上下文 如果有一个连接到服务器的脚本,然后 curl 本地主机以获取我需要的信息 问题 我的问题是,我需要从大约 200 台服务器获取信息,我使用的方法大约需要 15 分钟才能完成,这还不错,但我想做
我在尝试关闭 Paramiko SFTP 连接时遇到问题。即使我调用关闭连接仍然挂起,我通过运行 netstat (Windows) 检查: netstat -an | find ":22" 和pyt
localpath = 'U:\\' utime = sftp.stat("/TestBTEC/").st_mtime last_modified = datetime.fromtimestamp(u
我是一名优秀的程序员,十分优秀!