本地穿透
本地电脑,通过跳板机,访问跳板机内部的机器
如:
1、跳板机:192.168.1.242
2、跳板机能访问的机器:192.168.1.111 端口23500
3、本地IP 192.168.1.233 但是本地无法访问192.168.1.111
这个时候,可以通过在本地部署穿透,实现本地直接访问目标服务器
1、下载穿透服务并解压
阿里云盘:work/study/my-ssh
代码:https://gitee.com/wushusong/wss-server.git

2、修改配置:resource/application.yml

3、启动
运行环境:jdk8
4、测试

5、注意,如果是win服务器做跳板机,需要开启open-ssh服务
注意配置端口账号密码等


6、多层穿透
package com.wss.wssssh.utils;
import cn.hutool.extra.ssh.JschUtil;
import com.jcraft.jsch.Session;
import com.wss.wssssh.config.SshService;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class SshUtils {
/**
* 多层代理
* @param args
*/
public static void main(String[] args) {
//场景:本地,访问跳板机192.168.1.111 内部机器192.168.1.112 的内部机器192.168.1.40
//由于192.168.1.40 是 192.168.1.112 内部的机器, 并且 192.168.1.112 是192.168.1.111内部的机器,所以 需要两层代理
//代理1:访问跳板机192.168.1.111内部机器192.168.1.112
//本地通过跳板机192.168.1.111 访问跳板机内部机器 192.168.1.112 的22 端口,本地IP:127.0.0.1 端口:10001
//代理2:访问跳板机192.168.1.112内部机器192.168.1.40
//这里跳板机192.168.1.112 通过代理1 可以通过访问本地地址127.0.0.1:10001 端口直接访问
//所以通过本地地址127.0.0.1:10001(也就是代理1的实际地址:192.168.1.112:22) 代理到192.168.1.40:8848 本地的ip:192.168.1.239 端口:10002
//注意,多层穿透中,本地IP和端口,要不一样,这里使用了127.0.0.1作为代理1的本地IP,192.168.1.239作为代理2的本地IP
boolean start1 = start("192.168.1.111", 22, "root", "123456"
, "192.168.1.112", 22, "127.0.0.1", 10001
);
if(start1){
log.info("服务1 启动成功");
boolean start2 = start("127.0.0.1", 12345, "root", "123456"
, "192.168.1.40", 8848, "192.168.1.239", 10002
);
if(start2){
log.info("服务2 启动成功");
}else{
log.info("服务2 启动失败");
}
}
System.out.println(start1);
}
/**
* 启动SSH服务
* 配置跳板机SSH
* @param sshHost ssh ip
* @param sshPort ssh port
* @param sshUser ssh user
* @param sshPass ssh pass
* 配置内网转发
* @param remoteHost 远程内网IP
* @param remotePort 远程内网端口
* @param localHost 本地访问IP
* @param localPort 本地访问端口
*/
public static boolean start(String sshHost,int sshPort,String sshUser,String sshPass,
String remoteHost,int remotePort,
String localHost,int localPort
) {
/**
* 配置跳板机SSH
* 参数1:ssh ip
* 参数2:ssh 端口
* 参数3:ssh 用户名
* 参数4:ssh 密码
*/
Session session = JschUtil.getSession(sshHost, sshPort, sshUser, sshPass);
/**
* 配置内网转发
* 参数1:session
* 参数2:远程内网IP
* 参数3:本地访问IP
* 参数4:远程内网端口
* 参数5:本地访问端口
*/
return SshService.bindPort(session, remoteHost, localHost, remotePort, localPort);
}
}