繁体   English   中英

ssh 复用 & python:会这样工作吗?

[英]ssh multiplexing & python: Will it work like this?

前提条件:

  • 我想一次在一台远程机器上通过 ssh 从 python 执行动态多个命令
  • 我找不到任何与我的“风味”相匹配的现有模块(如果您关心原因,请参见下文 (*);))
  • Python 脚本在 Ubuntu 机器上本地运行

一般来说,对于单个“单一动作调用”,我只需使用subprocess.Popen进行本机 ssh 调用,它工作正常。

但是对于多个后续动态调用,我不想为每个命令创建一个新的 ssh 连接,即使远程主机可能允许它。 我想到了以下解决方案:

1) Configure my local ssh on Ubuntu to use multiplexing, so as long as a connection is open, it is used instead of creating a new one ( https://www.admin-magazin.de/News/Tipps/Mit-SSH -Multiplexing-schneller-einloggen (对不起,德语))

2)通过在正在运行的后台线程中打开它来创建 ssh 连接,除了必要时可能会“保持活动”或类似的事情之外,它本身什么都不做,并保持连接打开直到它关闭(即通过停止线程)。 http://sebastiandahlgren.se/2014/06/27/running-a-method-as-a-background-thread-in-python/

3) 仍然通过subprocess.Popen简单地执行 ssh 调用,但由于 ssh 多路复用配置,现在自动使用打开的连接。

这应该有效,还是存在谬误警报?


(*)我不想要的:

  • 我发现的大多数解决方案/示例都使用了 paramiko。 在我的第一个“快乐之路”上,它就像魅力一样,但第一次失败测试导致内部 AttributeError ( https://github.com/paramiko/paramiko/issues/1617 ),我不想在此基础上构建任何东西.
  • 我发现的其他库,例如http://robotframework.org/SSHLibrary/SSHLibrary.html似乎没有真正的社区使用它们。
  • pexpect ....整个“预期”概念让我毛骨悚然,我认为只有在绝对没有其他合理理由的情况下才应该使用;)

您提出的建议很好,但您甚至不需要保持 ssh 连接在后台线程中运行。 如果您配置ControlMaster (用于重用现有连接)和ControlPerist (用于在所有其他连接已关闭时保持主连接打开),那么新的ssh连接将继续使用共享连接(只要它们发生在ControlPersist超时之前)。

这意味着如果您在代码外部设置ControlMaster配置(例如,在~/.ssh/ssh_config中),您的代码甚至不需要知道配置:它可以继续正常调用ssh ,并且ssh将负责重用连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM