SSH端口转发
2022 network linuxSSH 端口转发也被称为 SSH 隧道。
加密的 SSH 隧道作为一个容器,传输各种数据将其安全地送到远程系统。这种方法经常被用来规避标准的防火墙安全协议。
这里主要是了解 OpenSSH 在 Linux,Putty 在 Windows 上启用本地(Local),远程(Remote)和动态(Dynamic)的端口转发。
本地转发
语法:ssh -L <local_port>:<desination_server>:<remote_port> <user>@<host>
- local_port: 本地端口
- desination_server: 远程服务器
- remote_port: 远程服务器端口
- user: ssh 服务器用户名
- host: ssh 服务器
本地转发就是将应用对于本地主机端口的访问请求转发给 SSH 服务器上,由 SSH 服务器对远程服务器的端口发起访问请求。
远程服务器可也可以是 SSH 服务器本身,此时 desination_server 为 localhost。
使用场景:远程服务器不接受远程访问,SSH 服务器能够访问,我们可以通过本地转发的方式来实现远程访问。具体实现有:跳板机的实现、远程实现代理,本地进行转发,实现科学上网。
远程转发
语法:ssh -R <remote_port>:localhost:<local_port> <user>@<host>
远程转发的目的是允许远程服务器通过访问 SSH 服务器访问本地机器上的资源。
使用场景:本地机器不接受远程访问,SSH 服务器能够访问,我们可以通过远程转发的方式来实现远程服务器访问本地。
动态转发
语法:ssh -D <local_port> <user>@<host>
动态转发是一种特别的本地转发,可以通过本地转发实现类似的效果。
动态转发是 SSH 服务器转变成一个 SOCKS5 代理服务器,不需要预先定义远程端口和服务器。所以使用动态端口转发时,需要为程序配置 SOCKS5 代理设置。
当我们配置好动态转发后,通过指定的本地资源(如浏览器)访问指定的端口,那么所有来自本地资源的流量会转发到 SSH 服务器,由其帮我们进行请求访问。
Windows 的使用
Windows 下也可以通过 PowerShell,WSL 等工具来实现 SSH 的端口转发。
也可以处通过 Putty 等图形化工具来实现:
- 填写 Session 填写 SSH 服务器
- 点击 Connection > SSH > Tunnels
- 填写本地端口和目标服务器和端口,并勾选对应的转发类型,即可
AutoSSH
在网络不稳定的情况下,可以使用 autossh 进行守护监控。可以让 ssh 网络断开之后重启服务。
# 实例
autossh -M 7777 -D 7891 <user>@<host> -N -f
Linux 自启动
在 Linux 环境下设置自启动脚本,创建编辑文件 /etc/systemd/system/xxx.service
[Unit]
Description=proxy daemon
After=network.target
[Service]
User=chen # 最好设置对应的用户
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/ssh -D 7891 $user@$host -N
[Install]
WantedBy=multi-user.target
开启脚本 sudo systemctl start xxx
设置开机自动 sudo systemctl enable xxx
其他
-Nf
参数可以让远程转发在保持在后台。