SSH端口转发(隧道)

原文:http://linux-wiki.cn/wiki/zh-hans/SSH端口转发(隧道)



SSH端口转发(Port Forwarding),是一种隧道技术,流往某端口的数据被加密后传向另一机器,依据转发方式的不同,有多种应用场景。[1][2]

以下所有的命令都是用SSH客户端执行的。执行命令的电脑下面称为“本地”电脑;而“远程服务器”则是运行着SSH服务器的机器(本文以my-remote-host.com为例)。

目录

[隐藏]

本地转发

有时,远程机器能访问某个端口(如remote-secret.com:8080),但本地机器无法访问。这时使用SSH的本地转发功能,即可将远程端口映射到本地:

ssh -L 9090:remote-secret.com:8080 my-remote-host.com

此时访问本地的9090端口就相当于用远程服务器my-remote-host.com访问remote-secret.com:8080

Hint.gif
提示: 
如果写成 -L 9090:localhost:8080,就是把远程服务器的8080端口映射到本地的9090端口了

应用举例:如果远程服务器处于某受保护的内网中,可以借助其SSH服务获得与其等同的访问权限。

Hint.gif
提示: 
默认情况下,本地转发的端口只能在本机上访问,要想允许外部访问,请添加 -g选项。

远程转发

让远程服务器监听remote_port端口,使其被访问时像本地电脑在访问somehost:its_port一样。

ssh -R 9090:local-secret.com:8080 my-remote-host.com

这样,访问my-remote-host.com:9090就等同于用本机访问local-secret.com:8080

应用举例:有时,本地电脑处于NAT内网中,难以从外部访问;而远程服务器可轻易被访问。利用远程转发功能,可允许他人通过远程服务器间接访问本地电脑的某个端口。

Note.gif
注意: 
类似本地转发,远程转发的端口默认也只能在远程服务器本机上访问,要想允许外部访问,可改写为 -R *:9090:local-secrent.com:8080,并确保在服务器的 sshd_config中打开了 GatewayPorts选项。

动态转发

动态转发动态地将各种数据转发到远程端口。实际上相当于在本地电脑的指定端口开了一个SOCKS代理。如:

ssh -D 9090 my-remote-host.com

本地的9090端口就是一个SOCKS代理了。

Hint.gif
提示: 
如果 my-remote-host.com是境外服务器,则该SOCKS代理实际上具备了“翻墙”功能。

常用参数

端口转发常与以下参数配合使用[3]

-f
ssh将在后台运行
-N
不执行命令,仅转发端口
-C
压缩传送的数据
-i
使用指定的密钥登录

相关资料

  1.  SSH隧道技术简介
  2.  实战 SSH 端口转发
  3.  Ubuntu Forum: SSH Port forwarding, without shell invocation
在Windows系统下进行SSH端口转发,可借助PuTTY或OpenSSH客户端来完成,以下是具体配置方法: ### 使用PuTTY进行SSH端口转发 - **下载并安装PuTTY**:从PuTTY官方网站(https://www.putty.org/ )下载并安装PuTTY。 - **配置SSH连接**:打开PuTTY,在"Session"类别中,输入目标SSH服务器的IP地址和端口号。 - **配置端口转发**:在"Connection" -> "SSH" -> "Tunnels"类别中进行端口转发配置。 - **本地端口转发**:在"Source port"中输入本地端口号,"Destination"中输入目标主机和端口(格式为 `目标主机:目标端口`),选择"Local"单选框,点击"Add"按钮添加规则。例如,若要将本地的8081端口转发到目标服务器的8881端口,"Source port"填8081,"Destination"填 `目标服务器IP:8881`。 - **远程端口转发**:在"Source port"中输入远程服务器上的端口号,"Destination"中输入本地主机和端口(格式为 `本地主机:本地端口`),选择"Remote"单选框,点击"Add"按钮添加规则。例如,若要将远程服务器的8880端口转发到本地的8080端口,"Source port"填8880,"Destination"填 `localhost:8080`。 - **动态端口转发**:在"Source port"中输入本地SOCKS代理端口号,选择"Dynamic"单选框,点击"Add"按钮添加规则。例如,设置本地SOCKS代理端口为1080。 - **保存配置并连接**:在"Session"类别中,为本次配置命名,点击"Save"保存配置,然后点击"Open"建立SSH连接。 ### 使用OpenSSH进行SSH端口转发 - **确认OpenSSH已安装**:在Windows 10及以上系统中,默认已预装OpenSSH客户端。可在命令提示符或PowerShell中输入 `ssh -V` 来确认是否安装。 - **本地端口转发**:在命令提示符或PowerShell中执行以下命令,将本地的8081端口转发到目标服务器的8881端口: ```bash ssh -L 8081:目标服务器IP:8881 用户名@目标服务器IP ``` - **远程端口转发**:在命令提示符或PowerShell中执行以下命令,将远程服务器的8880端口转发到本地的8080端口: ```bash ssh -R 8880:localhost:8080 用户名@目标服务器IP ``` 前提是目标服务器的 `/etc/ssh/sshd_config` 中已启用 `GatewayPorts yes` 和 `AllowTcpForwarding yes`,并重启了 `sshd` 服务 [^2]。 - **动态端口转发**:在命令提示符或PowerShell中执行以下命令,创建本地SOCKS代理端口1080: ```bash ssh -D 1080 用户名@目标服务器IP ``` 之后在浏览器或软件中设置SOCKS代理为 `127.0.0.1:1080`,所有流量会通过SSH隧道转发 [^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值