SSH 端口转发(转载)

May 01, 2019

介绍

SSH 端口转发是一个特别强大好用的功能,这里将自己整理的笔记放在这里,如果你还没用过的话请往下看。

本文主要转载阮一峰的 SSH 端口转发文章,此功能非常强大好用,主要是不需要按照任何额外软件直接能用。

转发

本地端口转发

可作为跳板机访问其他设备等

$ ssh -N -L 2222:host1:22 host2

参数:

  • -N 不显示终端
  • -f 后台运行

远程端口转发

可用于内网穿透

$ ssh -N -R 8080:localhost:80 host1

默认情况下只侦听来自本地回环 127.0.0.1 的请求,如需要其他设备也能通过端口访问,则需要以下设置。

编辑 /etc/ssh/sshd_config 配置,将 GatewayPorts 参数改为 yes,然后重启:

/etc/ssh/sshd_config:

GatewayPorts yes

重启 sshd,然后重新执行转发命令:

$ service ssh restart
# or
$ systemctl restart sshd.service

动态转发

当我们在一个不安全的 WiFi 环境下上网,用 SSH 动态转发来保护我们的网页浏览及 MSN 信息无疑是十分必要的。

这种方式其实就是相当于socks代理,他会把本地的所有请求都转发到远程服务器上面,很实用哦,假如说你的那台服务器是在国外的话,你懂的! 创建了一个 SOCKS 代理服务。

当然,此代理配合 SwitchyOmege Chrome 插件使用应该是绝配。命令行 curl 等 可以通过 export http_proxy=proxy_addr:port 来访问。

$ ssh -D <local port> <SSH Server>

X 协议转发

我们日常工作当中,可能会经常会远程登录到 Linux/Unix/Solaris/HP 等机器上去做一些开发或者维护,也经常需要以 GUI 方式运行一些程序,比如要求图形化界面来安装 DB2/WebSphere 等等。这时候通常有两种选择来实现:VNC 或者 X 窗口,让我们来看看后者。

打算找个时间玩玩,对比一下 VNC

$ export DISPLAY=<X Server IP>:<display #>.<virtual #>

其他

稳定性维持(使用 autossh 代替 ssh)

不幸的是 SSH 连接是会超时关闭的,如果连接关闭,隧道无法维持,那么 A 就无法利用反向隧道穿透 B 所在的 NAT 了,所以我们需要一种方案来提供一条稳定的 SSH 反向隧道。

一个最简单的方法就是 autossh,这个软件会在超时之后自动重新建立 SSH 隧道,这样就解决了隧道的稳定性问题。

macOS:

$ brew install autossh

参数

  • -M: 负责通过这个端口监视连接状态

防火墙开放端口

云服务大多配置了防火区与安全组,访问时确保不被拦截,下面是 iptables 例子:

$ sudo iptables -I INPUT -p tcp --dport 6766 -j ACCEPT

参考