首页 > 解决方案 > 我可以在 netmiko/paramiko 中获取 ssh 连接的源端口吗?

问题描述

我有一个应用程序,我通过控制台服务器在 LAB 环境中配置 Cisco 路由器。
可以通过 SSH 访问路由器。有时在程序退出/崩溃后,ssh 连接不会终止。
重新启动后,当控制台服务器上的端口被阻止时,我无法登录到该特定路由器。
要取消阻止它,我需要终止该 ssh 会话。
如果我有更多正在使用的会话,我不知道我需要终止其中的哪些会话,所以我想在 paramiko/netmiko 建立连接时获取源端口。

以前有人这样做过吗,或者也许有人有想法。

标签: pythonsshparamikonetmiko

解决方案


要获取 Paramiko SSH 连接的底层套接字,请使用ssh.get_transport().sock. 然后,请参阅如何打印已连接套接字的本地和远程地址和端口?

所以通常,这会起作用:

port = ssh.get_transport().sock.getsockname()[1]

但这有几个假设。由于您不需要以编程方式使用端口号,因此更安全的是只打印 的完整结果getsockname(),而不是假设结果是一个端口位于索引 1 的元组。


推荐阅读