遇到的问题
遇到一些问题,提供的解决方案
访问(私有)数据库
SSH隧道
ssh远程服务器可以访问内部的一个网段,但是我电脑无法直接访问这些网段
- 解决方案:配置ssh转发服务器,将服务器作为跳板机访问内网
SSH本地端口转发
这种方法适用于你需要访问内网中某一个特定的服务(访问内网的web网站、数据库、远程桌面)
原理:在本地电脑开启一个端口,所有发向这个端口的数据,都会通过SSH隧道加密传输到你的云服务器,在由云服务器转发到目标内网机器指定端口
ssh -L [本地IP]:[本地端口]:[内网目标IP]:[内网目标端口] 用户名@云服务器IP -N
参数解释:
-L: 进行本地端口转发。
[本地IP]: 通常可以省略或使用 127.0.0.1,表示只允许本机访问。如果想让局域网其他机器也能通过你这台电脑访问,可以用 0.0.0.0。
[本地端口]: 你在本地电脑上打开的端口,可以任意指定一个未被占用的(如 8080, 33060, 33890 等)。
[内网目标IP]:[内网目标端口]: 你最终想要访问的内网服务的 IP 和端口。
-N: 不执行远程命令,仅建立隧道。如果只想转发端口,加上这个参数更简洁。案例
假设你的情况如下:
云服务器 IP: 123.123.123.123
云服务器 SSH 用户: root
内网有一台 Web 服务器,地址是 192.168.1.100,端口是 80
你想在本地电脑上通过访问 localhost:8080 来访问那个内网网站。
你需要在本地电脑的终端(Linux/macOS)或 PowerShell/CMD(Windows)中执行:
bash
ssh -L 8080:192.168.1.100:80 root@123.123.123.123 -N
输入密码后,这个隧道就建立了。现在你在本地浏览器打开 http://localhost:8080,访问的就是内网 192.168.1.100:80 的服务。特点
- 优点: 配置简单,针对特定服务非常有效。
- 缺点: 如果内网有很多服务,需要为每个服务都建立一条隧道,比较麻烦。
问题
- 在我进行测试的时候,在使用命令 ssh -N -L 13306:目标服务:端口 用户名臣 @ip
在使用命令之后,会短暂连接成功,访问也可以访问数据,但是过一会,就会提示:连接被关闭
解决办法
ssh -N -L 13306:目标服务:端口 用户名臣 @ip ** -p 22 -o ServerAliveInterval=30 -o ServerAliveCountMax=3
-o ServerAliveInterval=30
设置客户端每隔多少秒向服务器发送一个“保活”(keepalive)消息
-o ServerAliveCountMax=3
设置客户端允许多少个保活失败后,认为服务器已经断开连接,并关闭连接。mysql数据
mysql数据库时间字段的自动更新
自动更新时间戳 CURRENT_TIMESTAMP版权所有
版权归属:念宇
