Fabric: 将隧道上下文添加到 Fab

创建于 2011-08-19  ·  13评论  ·  资料来源: fabric/fabric

描述

这对我很有帮助,因为它会很容易
例如使用我的命令行连接到远程 MySQL 服务器
MySQL 客户端。

我们可以使用“with”上下文语句,例如:

with tunnel(local=3307, remote=3306):
    local('mysql --port=3007 --host=localhost' mydb < db/dbdump.sql')

这将消除将mysql转储文件上传到服务器的需要
只是为了能够运行导入。

另一个应用程序可能是用于管理 Cherokee Web 服务器。

Cherokee web admin 默认情况下只能从服务器访问
它正在运行。 所以你想访问你必须隧道的管理员
进入服务器并使用本地端口访问管理界面。
这也可以用这个功能来简化。

with tunnel(local=9090, remote=9090):
   sudo('cherokee-admin')
   prompt('Stop cherokee admin?')

最后一行将保持隧道打开,直到它通过提供输入而关闭。


最初由Taras Mankovski (tarasm) 于2009-11-02美国东部标准时间上午09:30提交

关系

  • 与 #38 相关:实施隧道
Feature Network

最有用的评论

939 仍在发布桶中,我只是从即将到来的 1.11 中删除它,因为我需要削减一些东西,但它会在下一个功能周期中获得优先权。 (看起来#1218 取代了#939,所以我可能最终会合并它并在更改日志中记入#939。)

所有13条评论

Jeff Forcier ( bitprophet ) 发布:


(修改了描述,所以代码块被缩进了:))


美国东部时间 2009 年 11 月 2 日上午9:35

如果隧道也支持相反的方式,那就太棒了。 意思是监听远程并将其转发到本地主机/其他本地可用的主机:端口。

@munhitsu 不过,我不确定这是如何专门用于 Fabric 的。 你能详细说明吗?

想象一下没有出站 http/代理访问的 DMZ 设置。
整个部署通过结构。

在这种情况下,我们可以使用结构通过 ssh 隧道本地代理,以便在 DMZ 中配置的主机可以临时访问。 现在我在第二个控制台上打开一个单独的 ssh 隧道,这样结构就可以在这个隧道的“上下文”中工作。

示例用法:

with rev_tunnel(local=8080, remote=8080):
    sudo("http_proxy='http://localhost:8080' apt-get install -y puppet")

好的,毕竟我猜这是一个相当标准的反向隧道设置,你的愿望是:Fabric 是让它处理隧道而不是你必须运行例如local(ssh -R ...)

我反复讨论这是否真的值得进入核心,但在 Fabric 中支持它确实很有意义; 其他解决方案是 hacky(例如,一些线程或子进程运行ssh - 如何做好这一点,确保它在 Fab 关闭时关闭,等等),我确实看到了用例的有效性(共享本地执行期间与远程端的资源。)

主要障碍是我不确定 SSH 库是否支持这个; 我们必须弄清楚这一点,如果不这样做,就必须有人实施。 (但是,我认为这将是对上述库的一个很好的补充,而不是巩固上述ssh -R解决方法。)

编辑:#38 讨论实现和修补等。 可能最好实际关闭它,并在此处简单地注意,在实施时,如果可能的话,应该可以使用上下文管理器触发。

我完全同意实现它以便我们进入、离开上下文,甚至更糟糕的多级上下文是很棘手的。

关于编辑:任何让我们更接近拥有此功能的东西都是一个好主意。

现在我将把它打开,只是为了保持细节。 不过,将其分配给 1.4,所以我不会忘记。 当我在做#38 时,我很有可能会尝试解决这个问题。 到master后会在这里更新,谢谢。

这实际上并不像我想的那样与#38 相关,因为它的变化仅仅是关于 SSH 流量本身的网关,而不是通过 SSH 连接隧道额外的端口。 这将需要一个不同的(或至少是额外的)解决方案。 暂时先平底船,抱歉 :) (意思是:仍然开放,只是不会在 1.5 中到来。)

我最近需要这个功能来同步到一个远程 rsync 服务器,它的端口不能直接访问,并发现 paramiko 的 forward.py 演示代码有我可以使用的示例代码,所以我想出了一个对我和我都很有效的解决方案在此处将其作为 forward.py 的补丁提交: https ://github.com/paramiko/paramiko/pull/504/

我们可以从那个补丁中添加ForwardServer并有一个local_tunnel() ,它只返回一个ForwardServer的实例。 根据@bitprophet关于拉取请求的建议,我将为 Fabric 开发补丁。

我实际上没有意识到,但已经有一个local_tunnel()的补丁,虽然我不完全确定它的状态。 我该怎么办?

@haridsv如果可以,请对其进行测试并在该补丁(#939)上提及您已成功使用它会有所帮助,否则请耐心等待:)谢谢!

有解决这个问题的计划吗? 有两个未完成的拉取请求一起解决了这个问题,但它们还没有经过审查? 我们有什么办法可以加快这个速度?

939、#1218

我一直在使用#1218 中的代码,没有任何问题。

939 仍在发布桶中,我只是从即将到来的 1.11 中删除它,因为我需要削减一些东西,但它会在下一个功能周期中获得优先权。 (看起来#1218 取代了#939,所以我可能最终会合并它并在更改日志中记入#939。)

此页面是否有帮助?
0 / 5 - 0 等级