商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何启用SFTP端口转发

如何启用SFTP端口转发

  发布于2026-07-05 阅读(0)

扫一扫,手机访问

SFTP端口转发本质上依赖SSH隧道来实现,毕竟SFTP本身就是SSH的子协议,所有数据传输都靠着SSH的加密通道来完成。换句话说,要启用SFTP端口转发,就是把SSH隧道当作一条安全的“专线”,让本地机器能通过它访问远程的SFTP服务。下面就来拆解具体的操作步骤和一些关键细节。

如何启用SFTP端口转发

一、准备工作

在做任何配置之前,有两件事得先确认好。

首先,SSH服务得是跑起来的。不管是作为跳板机的中间服务器,还是直连的远程主机,都得确保OpenSSH服务(比如CentOS上的openssh-server,Ubuntu上的openssh-server)已经安装并正常运行。检查状态可以用systemctl status sshd(CentOS)或systemctl status ssh(Ubuntu),如果没启动,用systemctl start sshd把它拉起来就行。

其次,权限和配置要到位。你得有目标SFTP服务器的访问权限(用户名密码或密钥),同时SSH服务器的默认配置通常是允许端口转发的。但为了保险起见,最好心里有数:如果后面转发失败,可以先往这个方向查。

二、用SSH命令行配置本地端口转发

这是最常用、也最直接的方法。它的原理很简单:把本地机器上的某个端口,映射到远程SFTP服务器的22端口(或者你自定义的SFTP端口)。然后,你访问本地的这个端口,就等于在访问远程的SFTP服务,所有流量都通过SSH加密隧道走。

命令的基本格式长这样:

ssh -L local_port:remote_sftp_host:remote_sftp_port user@ssh_server

拆开来看几个关键参数:

  • local_port:本地机器上要用来监听的端口号。比如2222,只要这个端口没被其他程序占用就行。
  • remote_sftp_host:远程SFTP服务器的地址,可以是域名(如example.com)或IP(如192.168.1.100)。
  • remote_sftp_port:远程SFTP服务器的端口号,默认是22。如果你改了SFTP的端口,这里就填你改的那个。
  • user@ssh_server:登录SSH服务器的用户名和地址。如果是要通过跳板机连接,这里就是跳板机的信息;如果是要直连SFTP服务器,那这个ssh_server直接填目标SFTP服务器地址就行。

举个例子:假设我们要把本地的2222端口,通过跳板机jump.example.com,转发到内网服务器192.168.1.10022端口上。命令就是:

ssh -L 2222:192.168.1.100:22 user@jump.example.com

执行这条命令后,隧道就算建好了。怎么验证它通不通?很简单,另开一个终端窗口,用sftp命令连接本地的2222端口:

sftp -P 2222 localhost

如果看到sftp>提示符,说明转发成功了,你现在已经通过隧道连上了远程的SFTP服务。

三、用SSH配置文件简化操作

如果某个转发规则需要反复使用,每次都敲一长串命令确实有点烦。这时候可以把配置固化到~/.ssh/config文件里(这个文件不存在就自己创建一个)。

配置示例:

Host remote_sftp
    HostName remote_sftp_host
    User your_username
    LocalForward 2222 localhost:22

这里Host后面的remote_sftp是个自定义别名,方便记忆和调用。设置好之后,你只需要在终端输入ssh remote_sftp,它就会自动建立好转发。之后要用SFTP连接时,还是用sftp localhost -p 2222就行。

四、防火墙也得放行

隧道建好了,但本地的防火墙如果没开放转发端口,连接还是会失败。这一步不能省。

以CentOS为例,用firewalld的话:

sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload

Ubuntu用ufw的话:

sudo ufw allow 2222/tcp
sudo ufw enable

如果服务器用的是传统的iptables,规则是这样的:

sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
sudo netfilter-persistent sa ve

五、让隧道持久在线

默认情况下,SSH隧道在你关闭终端窗口时就会断开。如果希望隧道长期保持,有几种办法可以试试。

方法一:加上-N选项。这个选项告诉SSH不要执行任何远程命令,纯粹保持连接,非常适合只做端口转发的场景:

ssh -N -L 2222:192.168.1.100:22 user@ssh_server

方法二:用autossh工具。它能自动监控SSH连接的状态,一旦发现断了,就立即重启。需要先安装(sudo yum install autosshsudo apt install autossh),然后这样用:

autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -L 2222:192.168.1.100:22 user@ssh_server

-M 0禁用监控端口,ServerAliveInterval 30表示每30秒发一次心跳包,ServerAliveCountMax 3意味着如果连续3次心跳没回应,autossh就会认为连接断了并主动重启。这套组合拳能让隧道非常稳定。

六、值得注意的几个点

最后补充几点实践中的建议。

1. 用密钥认证代替密码。 这能省去每次连接都要输密码的麻烦,安全性也更高。在自己的机器上生成密钥对(ssh-keygen),然后把公钥传到SSH服务器上(ssh-copy-id user@ssh_server),之后用起来就顺畅多了。

2. 服务器端配置要检查。 如果转发怎么都搞不通,可以去SSH服务器/etc/ssh/sshd_config文件里看看,确保下面几个参数是yes

AllowTcpForwarding yes
GatewayPorts yes

修改后别忘了重启SSH服务:sudo systemctl restart sshd

3. 了解远程端口转发。 有时候你可能反过来,想把远程服务器的某个端口映射到本地(比如远程服务器没有公网IP)。这就得用-R参数了,格式是ssh -R remote_port:localhost:local_port user@ssh_server。不过前提是SSH服务器允许远程转发,也就是前面提到的AllowTcpForwarding yes

掌握这几个步骤和要点,SFTP端口转发的配置就能比较顺畅地跑起来了。通过本地端口安全访问远程SFTP服务,本质上就是利用SSH这把现成的安全锁,给数据传输加一层保障。

本文转载于:https://www.yisu.com/ask/28177654.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注