先决条件:
一般来说,对于单个“单操作调用”,我只需使用subprocess.Popen
执行本机ssh调用,效果很好
但是对于多个后续动态调用,我不想为每个命令创建新的ssh连接,即使远程主机可能允许。我想到了以下解决方案:
1)在Ubuntu上配置我的本地ssh以使用多路复用,因此只要连接打开,就会使用它,而不是创建新的连接(https://www.admin-magazin.de/News/Tipps/Mit-SSH-Multiplexing-schneller-einloggen(对不起,德语))
2)通过在运行的后台线程中打开ssh连接来创建ssh连接,在后台线程中,除了必要的“keepalive”或诸如此类的操作之外,什么都不做,并保持连接打开直到关闭(即停止线程)。(http://sebastiandahlgren.se/2014/06/27/running-a-method-as-a-background-thread-in-python/)
3)仍然只通过subprocess.Popen
执行ssh调用,但由于ssh多路复用配置,现在自动使用开放连接
这是可行的,还是存在谬误警报
(*)我不想要的:
您的建议很好,但您甚至不需要在后台线程中保持ssh连接的运行。如果配置
ControlMaster
(用于重用现有连接)和ControlPerist
(用于在所有其他连接都已关闭时保持主连接打开),则新的ssh
连接将继续使用共享连接(只要它们发生在ControlPersist
超时之前)这意味着,如果您在代码外部设置了
ControlMaster
配置(例如,在~/.ssh/ssh_config
),您的代码甚至不需要知道配置:它可以继续正常调用ssh
,并且ssh
将负责重用连接相关问题 更多 >
编程相关推荐