经常需要在自己的电脑访问服务器的某些服务,又懒得调整服务器的防火墙,害怕出现安全隐患。最佳的解决方案就是端口转发。端口转发也有很多现成方案比如frp,nps。但是每台服务器都安装太过于麻烦,其实OpenSSH就自带端口转发功能。对比其他方案,无需安装其他额外软件即可转发流量,还能让转发的流量享受SSH隧道的高强度加密,是一个比较好的方案。
角色定义
为了防止我自己混淆定义,我就不说什么host,remote了,怕自己搞混。预先定义如下两个角色:
本机:运行这个ssh指令的机器。
服务器:ssh要连接到的那台机器。
正向代理
描述
参数 | 内容 |
---|---|
-L | 本机地址1:本机端口:服务器地址:服务器端口 |
在本机监听端口,将服务器的某个端口上的服务映射到本机的某个端口,直接访问本机的某个端口就像直接访问服务器的某个服务一样。
例子
ssh -L 127.0.0.1:1234:127.0.0.1:4567
访问本机的1234端口即可访问服务器的4567端口上的服务,但是只在本机的127.0.0.1地址上监听端口,其他用户无法通过本机访问服务器的端口。
ssh -L 0.0.0.0:1234:127.0.0.1:4567
任何用户都可以通过本机的1234端口访问服务器的4567端口上的服务。
ssh -L 127.0.0.1:1234:192.168.7.21:4567
访问本机1234端口,服务器将代理访问位于192.168.7.21:4567上的服务。
反向代理
描述
参数 | 内容 |
---|---|
-R | 本机地址2:本机端口:服务器地址:服务器端口 |
在服务器上监听端口,访问服务器的某个端口就如同访问本机的某个端口上的服务一样。
例子
ssh -R 127.0.0.1:1234:127.0.0.1:4567
服务器访问自己的4567端口可以访问本机的1234端口上的服务,但是只在服务端的127.0.0.1地址上监听端口,其他用户无法通过服务器访问本机端口。
ssh -R 127.0.0.1:1234:0.0.0.0:4567
任何用户都可以通过服务器的4567端口访问本机的1234端口上的服务。
ssh -R 192.168.7.21:1234:0.0.0.0:4567
访问服务器的4567端口,本机将代理访问位于192.168.7.21:1234上的服务。
可能有用的一些额外参数
参数 | 说明 |
---|---|
-4 | 强制使用IPV4连接 |
-6 | 强制使用IPV6连接 |
-C | 请求压缩传输3 |
-f | 在后台运行 |
-N | 不运行任何远程命令 |
-n | 禁用标准输入 |
-p | 自定义SSH服务端口号 |
-q | 安静模式,减少显示提示信息 |
-T | 请求SSH服务器不分配tty控制台 |
断线重联?
ssh并不原生支持断线重联功能,但是你可以把指令丢进死循环里,一旦断线立刻重新连接:
while true
do
ssh -L 127.0.0.1:1234:127.0.0.1:4567
done
Comments NOTHING