SSH转发对于传输使用未加密协议(如VNC或FTP) , 访问地理限制内容或绕过中间防火墙的服务的网络数据非常有用 。基本上,您可以转发任何TCP端口并通过安全的SSH连接隧道传输流量 。
SSH 端口转发有三种类型:
本地端口转发 。– 将连接从客户端主机转发到 SSH 服务器主机,然后转发到目标主机端口 。
远程端口转发 。– 将端口从服务器主机转发到客户端主机,然后转发到目标主机端口 。
动态端口转发 。– 创建 SOCKS 代理服务器 , 允许跨一系列端口进行通信 。
在本文中,我们将讨论如何设置本地,远程和动态加密的 SSH 隧道 。
本地端口转发
本地端口转发允许您将本地 (ssh 客户端)计算机上的端口转发到远程 (ssh 服务器)计算机上的端口,然后将其转发到目标计算机上的端口 。
在这种类型的转发中,SSH 客户端侦听给定端口,并将与该端口的任何连接隧道连接到远程 SSH 服务器上的指定端口,然后该端口连接到目标计算机上的端口 。目标计算机可以是远程 SSH 服务器或任何其他计算机 。
本地端口转发主要用于连接内部网络(如数据库或 VNC 服务器)上的远程服务 。
在 Linux ,macOS 和其他 Unix 系统中创建本地端口转发将 -L 选项传递给 ssh 客户端:
ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER
使用的选项如下:
[LOCAL_IP:]LOCAL_PORT – 本地机器的 ip 和端口号 。当 LOCAL_IP 省略 SSH 客户端会连接本地主机 。
DESTINATION:DESTINATION_PORT – 目标计算机的 IP 或主机名和端口 。
[USER@]SERVER_IP – 远程 SSH 用户和服务器 IP 地址 。
LOCAL_PORT 可以使用任何大于 1024 的端口号 。端口号小于 1024 特权端口 , 只能由 root 用户使用 。如果您的 SSH 服务器正在侦听 22 以外的端口(默认值) , 请使用该 -p [PORT_NUMBER] 选项 。
目标主机名必须可从 SSH 服务器解析 。
假设您在内部(专用)网络上的计算机 db001.host 上运行 MySQL 数据库服务器 , 在端口 3306 上可以从计算机访问,并且您希望使用本地计算机 pub001.host 上的 mysql 客户端连接到数据库服务器 。为此,您可以转发连接,如下所示:
ssh -L 3336:db001.host:3306 user@pub001.host
运行该命令后,系统将提示您输入远程 SSH 用户密码 。输入后,您将登录远程服务器并建立 SSH 隧道 。建立基于 SSH 密钥的身份验证连接到服务器而不输入密码是更好的选择 。
现在,如果您将本地计算机数据库客户端指向 127.0.0.1:3336 ,则连接将 db001.host:3306 通过 pub001.host 将充当中间服务器的计算机转发到 MySQL 服务器 。
您可以在单个 ssh 命令中将多个端口转发到多个目标 。例如 , 您在计算机上运行另一个 MySQL 数据库服务器, db002.host 并且您希望从您将运行的本地客户端连接到两个服务器:
ssh -L 3336:db001.host:3306 3337:db002.host:3306 user@pub001.host
要连接到您将使用的第二台服务器 127.0.0.1:3337。
目标主机与 SSH 服务器相同时,而不是指定可以使用的目标主机 IP 或主机名 localhost。
假设您需要通过在同一服务器上运行的 VNC 连接到远程计算机,并且无法从外部访问它 。您将使用的命令是:
ssh -L 5901:127.0.0.1:5901 -N -f user@remote.host
该 -f 选项告诉 ssh 命令在后台运行而 -N 不是执行远程命令 。我们正在使用,localhost 因为 VNC 和 SSH 服务器在同一主机上运行 。
如果您在设置隧道时遇到问题 , 请检查远程 SSH 服务器配置并确保 AllowTcpForwarding 未设置为 no。默认情况下,允许转发 。
远程端口转发
远程端口转发与本地端口转发相反 。它允许您将远程 (ssh 服务器)计算机上的端口转发到本地 (ssh 客户端)计算机上的端口,然后将其转发到目标计算机上的端口 。
在这种类型的转发中,SSH 服务器侦听给定端口,并将与该端口的任何连接隧道连接到本地 SSH 客户端上的指定端口,然后该端口连接到目标计算机上的端口 。目标计算机可以是本地计算机或任何其他计算机 。
在 Linux,macOS 和其他 Unix 系统中创建远程端口转发将 -R 选项传递给 ssh 客户端:
ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER
使用的选项如下:
[REMOTE:]REMOTE_PORT – 远程 SSH 服务器上的 IP 和端口号 。空 REMOTE 表示远程 SSH 服务器将在所有接口上绑定 。
- 如何修改远程连接的端口号 windows远程桌面端口怎么修改
- 微信如何转发语音 微信怎样转发语音聊天信息
- win7设置代理ip 代理服务器ip地址和端口号
- Linux系统下的端口映射技术及其实现方法
- SSH代理详解:穿透防火墙与保护数据传输安全
- Linux环境下开放指定端口的全面教程
- SFP端口可容纳的两个设备之间的最大距离是多少?
- cmd查看进程占用端口 cmd批处理编程入门到精通教学
- windows查询端口占用进程 查看端口号被占用命令的问题处理
- 转发和分享别人的文章视频有收益吗?只说对一半