SFTP端口转发配置指南(基于SSH隧道)
SFTP(SSH File Transfer Protocol)作为SSH的内置子协议,其端口转发需通过SSH隧道的本地转发或远程转发实现。以下是详细配置步骤及注意事项:
sudo systemctl status sshd(运行则显示active (running));未安装则执行sudo yum install openssh-server。sudo systemctl status ssh;未安装则执行sudo apt install openssh-server。192.168.1.100或sftp.example.com);sftp_user);22,若修改需确认)。作用:将本地机器的某个端口(如2222)映射到远程SFTP服务器的22端口,通过本地端口访问远程SFTP。
步骤:
执行端口转发命令:
在本地终端运行以下命令(以转发到192.168.1.100:22为例):
ssh -L 2222:192.168.1.100:22 sftp_user@ssh_server_ip
-L:指定本地转发模式;2222:本地监听端口(可自定义,需未被占用);192.168.1.100:22:远程SFTP服务器的地址和端口;sftp_user@ssh_server_ip:跳板机/SSH服务器的登录凭证(若跳板机与远程SFTP服务器为同一台,ssh_server_ip可省略或替换为localhost)。验证转发有效性:
打开新终端,使用SFTP连接本地端口:
sftp -P 2222 localhost
若提示Connected to localhost并进入sftp>交互界面,则转发成功。
保持隧道持久化(可选):
若需隧道在断开终端后仍运行,可使用autossh工具(需提前安装):
sudo yum install autossh -y # CentOS
sudo apt install autossh -y # Ubuntu
autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -L 2222:192.168.1.100:22 sftp_user@ssh_server_ip
-M 0:禁用autossh的监控端口;-o "ServerAliveInterval 30":每30秒发送一次保活信号;-o "ServerAliveCountMax 3":连续3次无响应则重启隧道。若频繁使用同一转发,可将配置写入~/.ssh/config文件(不存在则创建):
nano ~/.ssh/config
添加以下内容(以转发到192.168.1.100:22为例):
Host remote_sftp
HostName ssh_server_ip # 跳板机/SSH服务器的IP/主机名
User sftp_user # SSH登录用户名
LocalForward 2222 192.168.1.100:22 # 本地转发配置
保存后,直接运行ssh remote_sftp即可建立隧道,无需重复输入长命令。
若SSH服务器限制了端口转发,需修改其配置文件:
sudo nano /etc/ssh/sshd_config
AllowTcpForwarding yes # 允许TCP转发
GatewayPorts yes # 允许远程主机连接本地转发端口(若需远程访问本地转发端口)
sudo systemctl restart sshd # CentOS
sudo systemctl restart ssh # Ubuntu
确保防火墙允许转发端口的流量:
sudo firewall-cmd --permanent --add-port=2222/tcp # 开放本地转发端口
sudo firewall-cmd --reload
sudo ufw allow 2222/tcp # 开放本地转发端口
sudo ufw enable # 启用UFW(若未启用)
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT # 开放端口
sudo netfilter-persistent save # 保存规则(Debian/Ubuntu)
作用:若远程SFTP服务器位于内网(无法直接访问),可通过跳板机将远程端口映射到内网SFTP服务器,实现外部访问。
步骤:
在远程SFTP服务器上执行:
ssh -R 3333:localhost:22 jump_user@jump_server_ip
-R:指定远程转发模式;3333:跳板机上监听的端口(可自定义);localhost:22:远程SFTP服务器的本地地址和端口(localhost指远程SFTP服务器自身);jump_user@jump_server_ip:跳板机的登录凭证。验证:在跳板机上运行sftp -P 3333 localhost,若能连接则说明转发成功。
ssh-keygen生成密钥,ssh-copy-id复制到服务器),提高安全性;autossh保持隧道;netstat -tulnp | grep 端口号检查)。