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

在做任何配置之前,有两件事得先确认好。
首先,SSH服务得是跑起来的。不管是作为跳板机的中间服务器,还是直连的远程主机,都得确保OpenSSH服务(比如CentOS上的openssh-server,Ubuntu上的openssh-server)已经安装并正常运行。检查状态可以用systemctl status sshd(CentOS)或systemctl status ssh(Ubuntu),如果没启动,用systemctl start sshd把它拉起来就行。
其次,权限和配置要到位。你得有目标SFTP服务器的访问权限(用户名密码或密钥),同时SSH服务器的默认配置通常是允许端口转发的。但为了保险起见,最好心里有数:如果后面转发失败,可以先往这个方向查。
这是最常用、也最直接的方法。它的原理很简单:把本地机器上的某个端口,映射到远程SFTP服务器的22端口(或者你自定义的SFTP端口)。然后,你访问本地的这个端口,就等于在访问远程的SFTP服务,所有流量都通过SSH加密隧道走。
命令的基本格式长这样:
ssh -L local_port:remote_sftp_host:remote_sftp_port user@ssh_server
拆开来看几个关键参数:
2222,只要这个端口没被其他程序占用就行。example.com)或IP(如192.168.1.100)。22。如果你改了SFTP的端口,这里就填你改的那个。ssh_server直接填目标SFTP服务器地址就行。举个例子:假设我们要把本地的2222端口,通过跳板机jump.example.com,转发到内网服务器192.168.1.100的22端口上。命令就是:
ssh -L 2222:192.168.1.100:22 user@jump.example.com
执行这条命令后,隧道就算建好了。怎么验证它通不通?很简单,另开一个终端窗口,用sftp命令连接本地的2222端口:
sftp -P 2222 localhost
如果看到sftp>提示符,说明转发成功了,你现在已经通过隧道连上了远程的SFTP服务。
如果某个转发规则需要反复使用,每次都敲一长串命令确实有点烦。这时候可以把配置固化到~/.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 autossh或sudo 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这把现成的安全锁,给数据传输加一层保障。
上一篇:怎样设置SFTP用户权限
下一篇:怎样在SFTP中启用压缩
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8