这对我很有帮助,因为它会很容易
例如使用我的命令行连接到远程 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提交
如果隧道也支持相反的方式,那就太棒了。 意思是监听远程并将其转发到本地主机/其他本地可用的主机:端口。
@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)上提及您已成功使用它会有所帮助,否则请耐心等待:)谢谢!
有解决这个问题的计划吗? 有两个未完成的拉取请求一起解决了这个问题,但它们还没有经过审查? 我们有什么办法可以加快这个速度?
我一直在使用#1218 中的代码,没有任何问题。
最有用的评论
939 仍在发布桶中,我只是从即将到来的 1.11 中删除它,因为我需要削减一些东西,但它会在下一个功能周期中获得优先权。 (看起来#1218 取代了#939,所以我可能最终会合并它并在更改日志中记入#939。)