访问其它网络环境内的Linux服务器

Mar 3, 2017


有些时候,需要访问外部的Linux主机。但由于一般主机都会位于对方的内网,而没有办法直接连接。本文介绍一种使用ssh代理进行访问的解决方案。

问题描述

** 机器描述 **

机器设备 IP 用户名 备注
目标A 192.168.x.x user1 目标服务器,在局域网内
代理B B.B.B.B user2 代理服务器,A和C都可以访问
自己C   user3 自己,可以访问B都不能访问A

** 目标 **
从机器C通过ssh访问机器A

** 解决方案 **
在 A 机器上做到 B 机器的反向代理;在 B 机器上做正向代理本地端口转发

** 环境需求 **

  • 每台机器上都拥有ssh客户端,默认mac和linux系统都自带

** 详细步骤 **

  1. 在机器A上建立到机器B的反向代理
ssh -fCNR <port1>:localhost:22 <user2>@<B.B.B.B>

其中port1为 机器B 上的端口,用来与 机器A 上的22端口绑定

  1. 在机器B上建立正向代理,用于转发本地端口数据
ssh -fCNL "*:<port2>:localhost:<port1>" localhost

port2 为本地转发端口,用以和外网通信,并将数据转发到 port1,用于机器C访问

其中*代表允许来自任意的机器连接

  1. 在机器C上通过使用机器B作为代理进行访问机器A
ssh -p <port2> <user1>@B.B.B.B

注意:这里使用的是机器A的user1, 不是B.B.B.B的user2

** SSH命令参数说明 **

-f 后台运行
-C 允许压缩数据
-N 不执行任何命令
-R 将端口绑定到远程服务器,反向代理
-L 将端口绑定到本地客户端,正向代理