【问题标题】:ssh port forwarding syntax explanationssh端口转发语法解释
【发布时间】:2020-03-06 14:31:22
【问题描述】:

我正在继承一些devops代码,其中有一些端口转发调用如下:

server = 180.10.0.1   # fake  IP
ssh ubuntu@' + server + ' -L2222:localhost:2222 -L 27017:some_docker.amazonaws.com:27017'

我真的很难弄清楚这里发生了什么。因此,据我所知,端口2222server 上的流量被重定向到本地计算机上的端口2222。但是,我不确定在 server 上运行的 docker 映像的端口 27017 发生了什么。是否被重定向到主机的27017端口?

【问题讨论】:

    标签: docker ssh portforwarding


    【解决方案1】:

    端口 27017 被转发到 mongo/document db 主机。这样做是为了使 mongo 驱动程序能够与远程数据库通信。

    【讨论】:

    • 谢谢你。你能评论端口转发的方向性吗?我真的很困惑。本地机器上的 27017 端口是否被转发到 docker 客户端上的端口?非常感谢您的回答。
    • 端口从docker容器转发到远程mongo主机。当然是双向的,这样司机可以和 mongo 对话,而 mongo 可以和 docker 中的司机对话。只要您在启动 docker 时不通过 -p 27017:27017 暴露该端口,您的本地机器就无法与该端口通信。
    【解决方案2】:

    -Lport:host:hostport

    在本地机器(运行 ssh 命令的地方)上打开一个监听套接字。如果打开了一个连接,它将通过隧道将其连接到远程端并连接到 host:hostport。所以 2222 是 f.e.仅在远程计算机上的 localhost 上侦听。使用此隧道,您可以从本地计算机通过端口 (2222) 连接到它,即使远程计算机上的套接字仅在 localhost 上侦听(例如)。 第二部分类似,只是 host:hostport 是不同的机器,即 f.e.只能从您通过 SSH 连接的主机访问:

    A --[ssh]-->B--->C

    查看手册页:https://linux.die.net/man/1/ssh

    【讨论】:

    • 谢谢,超级解释。那么,在这种情况下,C 只能通过 B 访问,因此必须先隧道到 B 才能到达 C?
    • 是的,完全正确。只是为了完整性:您也可以执行反向操作(-R),它在远程端打开一个端口(如果允许)并通过隧道连接到您的主机,然后可以 f.e.连接到只能从调用方访问的另一台主机。这可用于允许远程主机访问某些本地资源... -L 和 -R 指定创建侦听端口的位置:在本地(-L)或远程(-R)端...
    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 2012-03-20
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多