SFTP端口转发依赖SSH隧道的实现,因为SFTP是SSH的子协议,其数据传输通过SSH加密通道完成。以下是启用SFTP端口转发的详细步骤及注意事项:
openssh-server、Ubuntu的openssh-server)。可通过systemctl status sshd(CentOS)或systemctl status ssh(Ubuntu)检查状态,未运行则用systemctl start sshd启动。本地端口转发是将本地机器的某个端口映射到远程SFTP服务器的22端口(或其他SFTP端口),通过本地端口访问远程SFTP服务。
命令格式:
ssh -L local_port:remote_sftp_host:remote_sftp_port user@ssh_server
参数说明:
local_port:本地机器监听的端口(如2222,需未被占用);remote_sftp_host:远程SFTP服务器的主机名或IP(如example.com或192.168.1.100);remote_sftp_port:远程SFTP服务器的端口(默认22,若修改过需替换);user:SSH服务器的登录用户名;ssh_server:中间SSH服务器的地址(若直接连接SFTP服务器,此处为remote_sftp_host)。示例:将本地2222端口转发到192.168.1.100的22端口(SFTP端口),通过ssh_server(如jump.example.com)连接:
ssh -L 2222:192.168.1.100:22 user@jump.example.com
验证转发:在另一个终端窗口,用sftp命令连接本地端口:
sftp -P 2222 localhost
若提示sftp>,则表示转发成功。
若频繁使用同一转发规则,可将配置写入~/.ssh/config文件(不存在则创建),避免重复输入长命令。
配置示例:
Host remote_sftp # 自定义别名,方便记忆
HostName remote_sftp_host # 远程SFTP服务器地址(如192.168.1.100)
User your_username # SSH登录用户名
LocalForward 2222 localhost:22 # 本地端口转发规则
使用方法:直接运行ssh remote_sftp即可建立转发,后续通过sftp localhost -p 2222连接。
若系统启用了防火墙(如CentOS的firewalld、Ubuntu的ufw),需开放本地转发端口,否则无法连接。
CentOS(firewalld):
sudo firewall-cmd --permanent --add-port=2222/tcp # 开放2222端口(永久生效)
sudo firewall-cmd --reload # 重新加载防火墙规则
Ubuntu(ufw):
sudo ufw allow 2222/tcp # 允许2222端口
sudo ufw enable # 启用ufw(若未启用)
若使用iptables(传统防火墙),可添加如下规则:
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT # 允许2222端口入站
sudo netfilter-persistent save # 保存规则(Debian/Ubuntu)
默认情况下,SSH隧道会在终端关闭时断开。若需长期保持转发,可使用以下工具:
-N选项:不执行远程命令,仅保持连接(适用于仅端口转发场景):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 33次无响应则重启隧道。id_rsa/id_rsa.pub)替代密码登录,避免每次连接输入密码。可将公钥上传至SSH服务器(ssh-copy-id user@ssh_server)。/etc/ssh/sshd_config文件,确保以下参数设置为yes:AllowTcpForwarding yes
GatewayPorts yes # 允许远程主机连接本地转发端口(可选)
修改后重启SSH服务:sudo systemctl restart sshd。-R参数(格式:ssh -R remote_port:localhost:local_port user@ssh_server),但需SSH服务器允许远程转发(AllowTcpForwarding yes)。通过以上步骤,即可完成SFTP端口转发配置,实现通过本地端口安全访问远程SFTP服务。