SSH端口转发实现内网穿透的实现
时间:2022-07-27
本文章向大家介绍SSH端口转发实现内网穿透的实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
我们局域网的机器能够访问外网,但是外网不能访问内网。因为内网访问互联网时候能确定外网的地址,外网却不能确定我们局域网内的具体地址。(ip地址有限)如果 我们在访问外网的时候,这个链接让他保持、不断,那么这个链接就相当于我们建了一条路,内网数据能出去,外网数据能进来,ssh也是这个方法。
使用ssh命令链接公网服务器
1、首先在外网服务器上编辑sshd的配置文件
vim /etc/ssh/sshd_config
#将GatewayPorts 开关打开
GatewayPorts yes
重启sshd服务,使用修改生效(linux 版本不同命令可能会有差异)
systemctl restart sshd
2、命令
ssh -NTf -R <local-host>:<local-port>:<remote -host>:<remote-port> user@host
local-host 可省略
例如:ssh -NTf -R 8888:127.0.0.1:8080 root@host
3、参数说明
-C 允许压缩数据 -f 后台运行 -N 表示只连接远程主机,不打开远程shell -R 将端口绑定到远程服务器,反向代理 -L 将端口绑定到本地客户端,正向代理 -T 不为这个连接分配TTY -NT 代表这个SSH连接只用来传数据,不执行远程操作
保持ssh链接不断开
通常我们使用ssh 链接服务器的时候,如果长时间不操作,这个链接是会关闭的。
方法一、设置客户端
1)用户级别的设置
vim ~/.ssh/config(如果没有config创建一个)
2)全局设置
/etc/ssh/ssh_config
选择其中一个就可以,添加下面参数
#每隔60秒向服务器发送一个空包
ServerAliveInterval 60
#如果超过两次没成功就断开
ServerAliveCountMax 2
#转发失败后退出,便于重建连接
ExitOnForwardFailure yes
临时写法(推荐,不影响他人)
ssh -o ServerAliveInterval=30 root@host
ssh -NTf -R 8888:127.0.0.1:8080 root@host -o ServerAliveInterval=30 -o ServerAliveCountMax=2
方法二、设置服务器端
vim /etc/ssh/sshd_config
#每隔30秒,服务器端向客户端发送心跳
ClientAliveInterval 30
#3次心跳无响应之后,会认为Client已经断开
ClientAliveCountMax 3
方法三、使用shell脚本
touch myAutoSSH.sh
因为我设置ssh连接是rsa免密认证,所以这里逻辑就不需要密码
ssh免密登录方法
while(1)
do
ssh -NTR <local-host>:<local-port>:<remote -host>:<remote-port> user@host
done
保证断开后立马就能连上把-f参数去掉 否则就死循环了
方法四、使用autossh
需要下载autossh软件,操作和直接使用ssh 差不多
-M是监听端口,监听命令是否有无响应的,帮我们保持链接的
autossh -M 5678 -NTR <local-host>:<local-port>:<remote-host>:<remote-port> user@host
我不喜欢下载软件-乱七八糟的软件装的很多,也不喜欢修改配置-修改后怕影响别人使用,所以我喜欢使用客户端临时配置的方式
以上就是本文的全部内容,希望对大家的学习有所帮助。
- RabbitMQ入门-初识RabbitMQ
- 谈谈分布式事务之三: System.Transactions事务详解[下篇]
- 当InternalsVisibleToAttribute特性遭遇"强签名"
- MyBatis-从查询昨天的数据说起
- WCF并发(Concurrency)的本质:同一个服务实例上下文(InstanceContext)同时处理多个服务调用请求
- Spring集成RabbitMQ-必须知道的几个概念
- Spring读书笔记——bean创建(上)
- 15:21爆出的小程序功能升级,你还要对小程序观望吗?
- 如何解决分布式系统中的跨时区问题[原理篇]
- 什么是区块链:块的结构
- Spring读书笔记——bean创建(下)
- 当区块链遇上传统行业 我们的生活和工作会改变吗?
- 如何设计开发好一个 HTTP API?
- [WCF权限控制]基于Windows用户组的授权方式[下篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法