Skip to content

golang 利用ssh包做无限级别的ssh代理,实现复杂网络环境下的各级网络跳转功能。

License

Notifications You must be signed in to change notification settings

xuexila/ssh.proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ssh.proxy

golang 利用ssh包做无限级别的ssh代理,实现复杂网络环境下的各级网络跳转功能。

包说明

code/ssh.proxy 代码文件
code/common 公共代码文件
sshProxy/ssh.proxy.go 应用入口文件。

配置说明

代理软件配置是一个json,合理运用配置的递归,可实现无限层级的网络代理

addr 代理配置集合

saddr 远程前置机机器的IP 和端口,当前网络可连通的远程服务器地址

user 用户名

type 用户验证方式 1、密码验证 2、密钥验证

passwd 密码或者密钥文件路径

connect 转发类型 L、本地转发 R、远程转发 D、动态转发

remote 本地转发或者远程转发的远程监听或者连接地址

listen 监听在本地的端口

son 下一级别的代理配置,可忽略。

一级本地转发

比如在办公室环境,访问云端局域网的某一台内网的机器C。现在有云端前置机B,办公室可通前置机B,内网服务器C可通前置机B,办公室与C机器不互通。现在通过前置机B可建立办公室与C的隧道,实现网络互通。

{
  "addr":[
    {
      "saddr":"120.28.22.113:22", // 本地转发
      "user": "root",
      "type": 1,
      "passwd": "test12345",
      "connect": "L",
      "remote": "120.28.23.113:22",
      "listen": "127.0.0.1:6001",
    }
  ]
}

一级远程转发

小明还是在办公室,这一次他要访问家里的电脑C,小明家里的网络是中国移动,没有独立的公网IP。不过小明还有一台服务器B放在公网中的,有独立的IP。

下面是操作步骤:

  1. 先在家建立起家庭到服务器的隧道,俗称远程转发。
  2. 通过服务器与家庭建立的隧道,在外地访问家庭。
{
  "addr":[
    {
      "saddr":"120.28.22.113:22", // 远程转发
      "user": "root",
      "type": 2,
      "passwd": ".ssh/auth",
      "connect": "R",
      "remote": "127.0.0.1:12345",
      "listen": "127.0.0.1:12345"
    }
  ]
}

上面的配置相当于访问 服务器的12345端口,即家庭电脑的12345端口。

一级动态转发

小明在办公室,但小明的公司将网络做了 封禁,只能连接某云的服务器,不能访问其他网络。但小明每天上班都没事做,想看看外面的网络是啥样的。小明利用某云的服务器,做了一个动态转发,实现了 访问外面的网络。

{
  "addr":[
    {
      "saddr":"120.28.22.113:22", // 远程转发
      "user": "root",
      "type": 2,
      "passwd": ".ssh/auth",
      "connect": "D",
      "listen": "127.0.0.1:12345"
    }
  ]
}

下面来做一个骚操作,多级别的隧道连接

小明有两台机器,一台在国外,一台在上海。现在的网络环境是这样的,小明不能直连国外的机器,但上海的机器可以连接国外的机器。现在小明要实现的公司是,小明要访问国外机器上的数据库服务,并且小明要访问外面的网络。

{
  "addr":[
    {
      "saddr":"120.28.22.113:22", // 上海服务器
      "user": "root",
      "type": 1,
      "passwd": "test12345",
      "connect": "L",
      "remote": "120.28.23.113:22", // 日本服务器
      "listen": "127.0.0.1:6001",
      "son":[
        {
                "saddr":"127.0.0.1:6001", // 将日本服务器的数据库 3306端口映射在本地的 3307端口,然后可以在本地直接访问3307端口,实现访问日本3306端口。
                "user": "root",
                "type": 2,
                "passwd": ".ssh/auto_key",
                "connect": "L",
                "remote": "127.0.0.1:3306",
                "listen": "127.0.0.1:3307",
        },
        {
                "saddr":"127.0.0.1:6001", // 动态转发,
                "user": "root",
                "type": 2,
                "passwd": ".ssh/auto_key",
                "connect": "D",
                "listen": "127.0.0.1:3308",
        }
      ]
    }
  ]
}

配置解说,

第一级,连接上海服务器,并通过上海服务器建立一个日本服务器 22 端口到本地 6001端口的隧道,

第二级,通过第一级建立的隧道,在直接连接日本服务器,在建立日本服务器与本地的隧道。

About

golang 利用ssh包做无限级别的ssh代理,实现复杂网络环境下的各级网络跳转功能。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages