温馨提示×

SFTP端口转发怎么设置

小樊
40
2025-12-26 16:46:11
栏目: 编程语言

SFTP端口转发设置指南

一、概念与常用方式

  • SFTP基于SSH,默认使用22端口。所谓端口转发,就是借助SSH把本地的某个端口经由跳板机/中间主机安全地“穿透”到目标机器的22端口,从而实现对不可直达的SFTP服务的访问。常用方式包括:
    • 本地端口转发(-L):把本地的端口映射到目标主机的22端口,适合“我在本地,要连内网SFTP”。
    • 远程端口转发(-R):把跳板机上的端口映射到我本地或第三台机器的22端口,适合“我在内网,要让外部访问我的SFTP”。
    • 动态转发(-D):SOCKS5代理,配合支持代理的客户端使用。
  • 常用SSH转发参数:
    • -L [本地IP:]本地端口:目标主机:目标端口
    • -R [远程IP:]远程端口:目标主机:目标端口
    • -N 仅做转发不打开远程shell,-f 后台运行,-v 打印调试信息。

二、本地端口转发到内网SFTP

  • 典型拓扑:你的电脑(本地) → 跳板机(B) → 内网SFTP服务器(C,IP为192.168.10.2,SSH端口22)。
  • 命令示例(在本地执行):
    • 将本地的8022转发到内网SFTP的22
      ssh -N -f -L 8022:192.168.10.2:22 jumpuser@jump.example.com
      
    • 连接测试(SFTP使用22协议,但连接到本地的8022端口):
      sftp -P 8022 sftpuser@localhost
      
  • 说明:
    • 若跳板机与SFTP在同一内网,目标主机写内网IP(如192.168.10.2);若SFTP就在跳板机上,可写127.0.0.1
    • 转发建立后,只有保持SSH会话存活,转发才有效。

三、远程端口转发让外部访问你的SFTP

  • 典型拓扑:外部用户 → 公网跳板机(B) → 你本地的SFTP(C,端口22)。
  • 命令示例(在你本地执行,把本地的22暴露到跳板机的2222):
    ssh -N -f -R 2222:127.0.0.1:22 you@jump.example.com
    
  • 外部用户连接(连接到跳板机的2222):
    sftp -P 2222 remoteuser@jump.example.com
    
  • 注意:
    • 默认仅允许从跳板机本机访问转发出去的端口。若要让外部访问,需在跳板机sshd配置中开启GatewayPorts yes,然后重启sshd,并把远程端口绑定到0.0.0.0(例如:-R 0.0.0.0:2222:127.0.0.1:22)。
    • 开启GatewayPorts会降低安全性,建议结合防火墙白名单密钥登录使用。

四、图形化客户端与多层转发

  • 图形化客户端示例(SecureCRT、FileZilla)
    • SecureCRT:Session Options → Connection → Port Forwarding → Add,添加规则如“Local: 8022 → 192.168.10.2:22”,保存并重新连接;随后用SFTP客户端连接localhost:8022
    • FileZilla:站点管理器新建站点,协议选SFTP,主机填127.0.0.1,端口填转发的本地端口(如8022),即可通过隧道连接。
  • 多层转发(两级跳板)
    • 第一层:在可达的外网跳板机B上,把B的8022转发到内网目标C的22
      ssh -N -f -L 8022:192.168.10.2:22 userB@B
      
    • 第二层:在你本地,把本地的9022转发到B的8022
      ssh -N -f -L 9022:127.0.0.1:8022 userA@B
      
    • 连接测试(最终到达C的22):
      sftp -P 9022 userC@localhost
      
  • 提示:多层转发链路较长,建议配合SSH密钥连接复用日志级别-v排错。

五、防火墙与SSH服务配置要点

  • 服务器侧(目标SFTP/跳板机)需放行SSH端口(默认22)及你转发出去的端口(如8022/2222);云主机安全组同样需要放通对应入站/出站规则。
  • 若使用firewalld(CentOS 7等),可用富规则或端口转发策略放行与映射端口,确保转发流量可达。
  • 若目标SFTP启用了Chroot且配置了AllowTcpForwarding no,则本地/远程端口转发将被拒绝;需要改为AllowTcpForwarding yes后重启sshd。示例(仅演示相关指令):
    sudo vim /etc/ssh/sshd_config
    # 将 AllowTcpForwarding 设为 yes
    sudo systemctl restart sshd
    
  • 虚拟机/NAT场景:在虚拟化平台(如VirtualBox)做端口转发(如“主机端口52222 → 虚拟机22”),再结合上面的SSH隧道或防火墙策略,实现从外部到虚拟机的SFTP访问。

0