SSH 的本地隧道和远程隧道的详细解释

我当前需求是: 1,我外网正式环境的mysql 3306端口不能被外部访问 2,我本地写的一个python脚本需要连接正式环境的mysql来导数据 3,我可以通过ssh连接远程mysql所在的服务器 所以的方案是...

我当前需求是:

1,我外网正式环境的mysql 3306端口不能被外部访问

2,我本地写的一个python脚本需要连接正式环境的mysql来导数据

3,我可以通过ssh连接远程mysql所在的服务器

所以的方案是通过SSH 隧道 把远程正式服务器的3306端口转发到我本机的127.0.0.1 的3306端口,我的脚本

只需要连接127.0.0.1 的3306 端口,ssh会自动把请求转发到远端服务器上mysql的3306端口上


ssh堆到命令如下:

ssh -i C:\sshfiles\ffff.pem  -N -L  127.0.0.1:3306:127.0.0.1:3306 root@xxx.78.xxx.xxx


-L是本地转发,-L后面的127.0.0.1是本地机器的地址,3306端口是通过ssh在本地打的隧道端口

后面的地址和端口都是远程的


上面红色命令执行结果为:、

在本机  3306  连 → 流量被 SSH 送到 远端 127.0.0.1:3306(远程 MySQL)。

ssh -i C:\sshfiles\ffff.pem  -N -R  127.0.0.1:3306:127.0.0.1:3306 root@xxx.78.xxx.xxx


只把-L 换成了-R   这变成了远程转发,-R后面的127.0.0.1 是远程ip地址,如果省略会变成在远程服务器打的隧道,会监听所有地址的3306端口(远程是即使省略的ip地址,只有端口号,也不一定会监听所有的ip地址,还和sshd_config 中的 GatewayPorts 是否为yes有关,默认都是no)

后面部分是本地的127.0.0.1 端口的3306 要被转发到远程服务器的部分。【-R会在远程服务器通过ssh映射端口,-L 会在本机映射端口】

这条命令结果是:

在 远端 127.0.0.1:3306 连 → 流量被 SSH 送回 本机 127.0.0.1:3306(本地 MySQL)



下面解释下 -N  -f参数的用途!!!!!


<#

 -f  会让 ssh 在认证成功后立即把自身放到后台(daemonize),

因此 PowerShell 退出并不影响它;进程已经交给操作系统继续运行。

 

 -N  只是告诉 ssh 不执行远程命令,专心做端口转发。

所以窗口关闭后,ssh 仍在后台维持监听,这是预期行为。


-f  就是“后台守护”开关,窗口关了 ssh 也不会退出,用  Get-Process ssh  能找到它,想关就  Stop-Process -Name ssh 。


ssh -i C:\sshfiles\ffff.pem  -N -L 3306:127.0.0.1:3306 root@xxx.78.xxx.xxx

上面这条命令省略了 本地地址,省略 bind 地址 → 默认  0.0.0.0:3306  全网卡监听;想只本地用,就显式写  127.0.0.1:3306 

#>

ssh -i C:\sshfiles\ffff.pem  -N -L  127.0.0.1:3306:127.0.0.1:3306 root@root@xxx.78.xxx.xxx

Write-Host "MySQL 隧道已后台启动,本地 3306 -> 远程 3306"

  • 发表于 2025-12-17 11:50
  • 阅读 ( 17 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章