【问题标题】:How to log each SSH session packet with Paramiko?如何使用 Paramiko 记录每个 SSH 会话数据包?
【发布时间】:2020-08-16 06:56:18
【问题描述】:

我正在使用 Paramiko 2.7.1,使用简单的客户端实现在远程 SSH 服务器上运行命令。

在我的大多数主机上,它都很好用。输入命令出去,输出(如果存在)回来。

一种特定类型的主机(准确地说是 IBM VIOS 分区)让我头疼,因为命令执行,但输出始终为空。 我在交互式会话中使用 PuTTY 来记录所有 SSH 数据包并检查是否存在任何差异,并且至少在交互式会话期间,工作主机和非工作主机之间没有差异。 我已启用 Paramiko 日志记录:

basicConfig(level=DEBUG)
logging.getLogger("paramiko").setLevel(logging.DEBUG)
log_to_file('ssh.log')

但输出不会转储每个数据包。我已经搜索了可以转储这些数据包的任何参数或方法,但我发现是空的。 Wireshark 不是一个选项,因为我们正在谈论加密连接。 我宁愿继续使用exec_command,而不必重构所有内容并适应使用 SSH shell。 所以,最后。有什么方法可以转储与 Paramiko 的整个 SSH 会话?我可以处理 SSH 数据包或原始数据。


编辑 1:我记得 PuTTY 的 plink.exe 执行 ssh exec 命令,所以我用它来比较 SSH 服务器的输出并偶然发现了我的基本问题的解决方案:https://www.ibm.com/support/pages/unable-execute-commands-remotely-vio-server-padmin-user-ssh
不过,我宁愿用 Paramiko 捕捉会话,因为我不会总是能够使用其他工具进行模拟......

【问题讨论】:

  • 这看起来像XY problem。我建议你问一个关于你的实际问题的问题,而不是你认为可以帮助你调试问题的问题(我认为数据包调试不会帮助你)。
  • 我很欣赏评论,但即使我的实际问题已经定义,我想知道的是如何使用 paramiko 调试 SSH 会话。在微控制器的汇编程序中磨砺了我的牙齿,我习惯于深入调试问题并且无法比较会话让我感到厌烦。从好的方面来说,没有 10 分钟过去了,我记得 putty 有 plink.exe,它也执行 ssh exec 命令,我可以用它来调试。所以我现在的问题已经用另一个工具解决了,但我仍然想知道如何记录 ssh 数据包。服务器之间的输出存在差异

标签: python ssh paramiko


【解决方案1】:

除了启用日志记录,调用Transport.set_hexdump()

client.get_transport().set_hexdump(True)

关于您原来的问题,另请参阅:
Command executed with Paramiko does not produce any output

【讨论】:

    猜你喜欢
    • 2018-01-19
    • 1970-01-01
    • 2016-07-29
    • 2021-12-12
    • 2019-12-13
    • 2011-07-21
    • 2020-09-12
    • 2010-12-27
    • 2015-10-07
    相关资源
    最近更新 更多