从外网 SSH 进局域网,反向代理+正向代理解决方案

相信不少同窗都会碰到这样一个问题。在实验室有一台机器用于平常工做,当我回家了或者回宿舍以后由于无法进入内网,因此访问不到了。若是这个时候我须要 SSH 进去作一下工做,那么怎么解决这个问题呢?本文将给出一种使用 SSH 的代理功能的解决方案。bash

问题描述:

机器情况

机器号 IP 用户名 备注
A 192.168.0.A usr_a 目标服务器,在局域网中,能够访问 A
B B.B.B.B usr_b 代理服务器,在外网中,没法访问 A
C - - 能够直接访问 B,没法直接访问 A

目标

从 C 机器使用 SSH 访问 A服务器

解决方案

在 A 机器上作到 B 机器的反向代理;在 B 机器上作正向代理本地端口转发ssh

环境需求

  • 每台机器上都须要 SSH 客户端
  • A、B 两台机器上须要 SSH 服务器端。一般是 openssh-server。代理

    在 Ubuntu 上安装过程为code

    bashsudo apt-get install openssl-server

实施步骤

  1. 创建 A 机器到 B 机器的反向代理【A 机器上操做】server

    bashssh -fCNR <port_b1>:localhost:22 usr_b@B.B.B.B

    <port_b1> 为 B 机器上端口,用来与 A 机器上的22端口绑定。ssl

  2. 创建 B 机器上的正向代理,用做本地转发。作这一步是由于绑定后的 端口只支持本地访问【B 机器上操做】get

    bashssh -fCNL "*:<port_b2>:localhost:<port_b1>' localhost

    <port_b2> 为本地转发端口,用以和外网通讯,并将数据转发到 <port_b1>,实现能够从其余机器访问。openssl

    其中的*表示接受来自任意机器的访问。反向代理

  3. 如今在 C 机器上能够经过 B 机器 ssh 到 A 机器

    bashssh -p <portb2> usra@B.B.B.B

至此方案完成。

附:

SSH 参数解释

-f 后台运行
-C 容许压缩数据
-N 不执行任何命令
-R 将端口绑定到远程服务器,反向代理
-L 将端口绑定到本地客户端,正向代理
相关文章
相关标签/搜索