ssh端口转发

SSH Tunneling

ssh端口转发,用来实现翻墙的操作。

它有几种不同的称呼:ssh端口映射,端口转发,ssh隧道,英文(SSH port forward, SSH tunneling )实际上是指同样的意思。

动态转发

动态转发指的是,本机与 SSH 服务器之间创建了一个加密连接,然后本机内部针对某个端口的通信,都通过这个加密连接转发。它的一个使用场景就是,访问所有外部网站,都通过 SSH 转发。

动态转发需要把本地端口绑定到 SSH 服务器。至于 SSH 服务器要去访问哪一个网站,完全是动态的,取决于原始通信,所以叫做动态转发。

$ ssh -D local-port tunnel-host -N

上面命令中,-D表示动态转发,local-port是本地端口,tunnel-host是 SSH 服务器,-N表示这个 SSH 连接只进行端口转发,不登录远程 Shell,不能执行远程命令,只能充当隧道。

举例来说,如果本地端口是2121,那么动态转发的命令就是下面这样。

$ ssh -D 2121 tunnel-host -N

注意,这种转发采用了 SOCKS5 协议。访问外部网站时,需要把 HTTP 请求转成 SOCKS5 协议,才能把本地端口的请求转发出去。

下面是 SSH 隧道建立后的一个使用实例。

$ curl -x socks5://localhost:2121 http://www.example.com

上面命令中,curl 的-x参数指定代理服务器,即通过 SOCKS5 协议的本地2121端口,访问http://www.example.com

Test tunnel

curl --socks5-hostname "socks5://localhost:2121" ifconfig.me

如果经常使用动态转发,可以将设置写入 SSH 客户端的用户个人配置文件(~/.ssh/config)。

DynamicForward tunnel-host:local-port

建立本地ssh隧道

典型场景

TunnelStruc.png

我想要从自己的机器直接访问远程服务的8080端口,可以建立本机的隧道监听端口,实现方法:

MyPC操作(192.168.0.111)

前提:通过ssh 可以直接从MyPC连接Jump Server

ssh -N -f -L 1111:10.0.1.4:8080 redhat@40.74.67.218

检查本地新出现的监听端口

$ netstat -an | grep LISTEN | grep 1111
tcp4       0      0  127.0.0.1.1111         *.*                    LISTEN
tcp6       0      0  ::1.1111               *.*                    LISTEN

本机打开浏览器,地址栏输入 http://localhost:1111 ,把本地 1111端口通过一台机器做跳板映射到了远程8080端口,可以直接访问。

连续跳转

当访问内部服务器需要跳过两个jump server,可以在jump机器上建立跳转,然后本机再做一次。

image-20201105134053882.png

第一次在靠近自己的跳板机(Jump1)上做。

ssh -i mykey jump2 -N -f -L 8443:real-server:8443

第二次在本机做映射

ssh -N -f -L 1111:localhost:8443 jump1

于是,在本机就可以访问端口1111了。

建立远程ssh隧道

假设由于网络或防火墙的原因我们不能用 SSH 直接从 本机 连接到 跳板 服务器(40.74.67.218),但是反向连接却是被允许的。那此时我们的选择自然就是远程端口转发了。
(场景:MyPC -> ssh -> Jump 被禁止;MyPC <- ssh <- Jump 允许)

因为本机使用内网IP, 不能直接反向直连,我找了另外一台服务器做例子,如下图:

TunnelSRemote.png

Jump 机操作(40.74.67.218)

ssh -N -f -R 2222:10.0.1.4:8080 redhat@40.83.72.19

Work 机验证(40.83.72.19)

$ netstat -an | grep 2222
tcp        0      0 127.0.0.1:2222          0.0.0.0:*               LISTEN
tcp6       0      0 ::1:2222                :::*                    LISTEN
$ wget http://localhost:2222

本地转发与远程转发的对比

SSH 端口转发自然需要 SSH 连接,而 SSH 连接是有方向的,从 SSH Client 到 SSH Server 。而我们的应用也是有方向的,比如需要连接 Web Server 时,Web Server 自然就是 Server 端,我们应用连接的方向也是从应用的 Client 端连接到应用的 Server 端。如果这两个连接的方向一致,那我们就说它是本地转发。而如果两个方向不一致,我们就说它是远程转发。

本地转发时:

MyPC 同时是应用的客户端,也是 SSH Client,这两个连接都从它指向 Jump所在网络。

远程转发时:

Work 是应用的客户端,但却是 SSH Server ;而 Jump 所在网络是 Web 的服务端,但却是 SSH Client 。这样两个连接的方向刚好相反。

另一种简单粗暴的区分:所有操作在同一台机器完成,这就是本地转发;否则就是远程转发。

过程中使用参数的解释

-f Fork into background after authentication.

-N Do not execute a shell or command.

-L port:host:hostport

-R port:host:hostport

中文再解释一遍,这里我们用到了SSH客户端的三个参数:

  • -N 告诉SSH客户端,这个连接不需要执行任何命令。仅仅做端口转发

  • -f 告诉SSH客户端在后台运行

  • -L 做本地映射端口,被冒号分割的三个部分含义分别是

    • 需要使用的本地端口号 (端口:1111)

    • 需要访问的目标机器IP地址(IP: 10.0.1.4)

    • 需要访问的目标机器端口(端口: 8080)

  • 最后一个参数是我们用来建立隧道的中间机器的IP地址(IP: 40.74.67.218)

我们再重复一下-L参数的行为。-L X:Y:Z的含义是,将IP为Y的机器的Z端口通过中间服务器映射到本地机器的X端口。

命令使用格式:

ssh -f -N -L listen_port:DST_Host:DST_port user@Tunnel_Host (本地转发)

ssh -f -N -R listen_port:DST_Host:DST_port user@Tunnel_Host (远程转发)

Windows SSH App 端口转发的方法

以Xshell 为例

xshellTunnel.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容

  • 第一部分 概述当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室...
    fastjrun阅读 1,145评论 0 8
  • 实战 SSH 端口转发 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中...
    hopevow阅读 1,051评论 0 9
  • 我的应用场景是:在vps(root@159.89.206.20)上面跑了个只能在服务器本地访问的网页:127.0....
    ThomasYoungK阅读 1,158评论 0 0
  • 这个应该不陌生吧, 当你看到自己账单上那个显赫的数字时,有没有被吓到呢? 对比一下自己的收入,看看我的账单,似乎还...
    山雨林夕阅读 176评论 0 1
  • 文 丨雪花如糖 这不是一本名家之作。没有宏大的主题,沒有引人入胜的故事,也没有所谓华美的文笔,有的只是平静从容的讲...
    雪花如糖阅读 3,044评论 35 69