如何使用 Paramiko 记录每个 SSH 会话数据包?
How to log each SSH session packet with Paramiko?
我正在使用 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 捕获会话,因为我并不总是能够使用其他工具进行模拟...
除了启用日志记录,调用 Transport.set_hexdump()
:
client.get_transport().set_hexdump(True)
关于你原来的问题,另见:
我正在使用 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 捕获会话,因为我并不总是能够使用其他工具进行模拟...
除了启用日志记录,调用 Transport.set_hexdump()
:
client.get_transport().set_hexdump(True)
关于你原来的问题,另见: