我有一个应用程序,我通过控制台服务器在 LAB 环境中配置 Cisco 路由器。
可以通过 SSH 访问路由器。有时在程序退出/崩溃后,ssh 连接不会终止。
重新启动后,当控制台服务器上的端口被阻止时,我无法登录到该特定路由器。
要取消阻止它,我需要终止该 ssh 会话。
如果我有更多正在使用的会话,我不知道我需要终止其中的哪些会话,所以我想在 paramiko/netmiko 建立连接时获取源端口。
以前有人这样做过吗,或者也许有人有想法。
要获取 Paramiko SSH 连接的底层套接字,请使用ssh.get_transport().sock
. 然后,请参阅如何打印已连接套接字的本地和远程地址和端口?
所以通常,这会起作用:
port = ssh.get_transport().sock.getsockname()[1]
但这有几个假设。由于您不需要以编程方式使用端口号,因此更安全的是只打印 的完整结果getsockname()
,而不是假设结果是一个端口位于索引 1 的元组。