首页
学习
活动
专区
工具
TVP
发布

【每周实战】SSH转发

深表惭愧的前言

最近忽然想起还有个公众号来着,上来一看居然有57名关注用户~真对不起大家!想想当初的初衷,惭愧啊!所以呢,最近会发些技术文章来提升下活跃度,当然,应该会一直坚持下去(大概)。

今天要写的是我想开的一个新专题,叫每周实战,就是把我日常使用中遇到的一些issue和解决方案写下来,共享给大家互相学习借鉴~

目的:

现有公网服务器一台(未特别说明时均为Linux服务器),IP为111.111.111.111,公司内网服务器一台,内网IP10.0.0.233,家里内网一台,内网IP192.168.3.200。希望能够从家里ssh连接到公司服务器,最好也能够从公司连到家里电脑。

网络拓扑如图:

分析:

遇到这个问题,第一反应就是ssh转发呀,但是怎么转呢?什么本地端口转发,远程端口转发什么的,搞得人头都晕了。没关系,我们来慢慢捋~~

原理:

SSH支持三种转发方式:本地端口转发,远程端口转发,动态转发。

先说简单的,动态转发。

命令格式:

ssh -D '*:1080' user@your_server

动态转发就是Socks5代理,连接成功后,支持socks5代理的程序可以通过命令行指定的端口(这里就是1080)来连接远程服务器那边可以访问的网络资源。

加星号表示监听 0.0.0.0,如果不加星号,则该代理端口仅允许本地连接。

下面讲另外两个比较容易混淆的:本地端口转发和远程端口转发。

两种命令的格式几乎是一致的,这也是这两个功能比较令人迷惑的:

ssh -L [host:]port:host:hostport user@your_server

ssh -R [host:]port:host:hostport user@your_server

这里的“本地”和“远程”指的是监听端口所在的机器(相对于ssh客户端)。如果你想在ssh客户端所在的机器上监听一个端口并将数据转发到ssh服务器,那就用本地端口转发;反之,如果你想在ssh服务器上监听一个端口并把请求数据转发到ssh客户端这边,那就是远程端口转发。

图解如下:

这里有几个关注点:

和动态转发一样,省略参数中的 '*' 会导致转发的端口只允许本地访问。

两条命令中的 'localhost' 含义不一样:本地转发命令中,localhost是对远程机器而言的一个名称;而远程转发命令中,localhost则确实指的是本机。

还有个坑要注意:如果你使用上面图3的命令来尝试转发本地ssh服务,那么很有可能无法访问2233端口,这是因为sshd默认禁用了GatewayPorts选项,只能在sshd服务所在本机访问绑定的2233端口,你可以把这个选项直接设为yes,也可以再开一个本地端口转发

总结

针对我们开头的问题,解决方案很简单了:

公司电脑访问家里电脑:

在家里电脑上连接公网服务器,并开启公网机器上的GatewayPorts选项

// -f: 后台运行

// -q: 静默模式

// -N: 不执行命令

111.111.111.111 $> grep 'GatewayPorts' /etc/ssh/sshd_config

GatewayPorts yes

家里电脑访问公司电脑:

以上操作在公司电脑上执行一遍即可。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180414G082CT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券