SFTP端口转发设置指南(基于SSH隧道)
SFTP(SSH File Transfer Protocol)本质上是SSH协议的扩展,默认通过SSH加密通道传输文件。因此,SFTP端口转发需借助SSH的端口转发功能实现,主要分为本地端口转发(将本地端口映射到远程SFTP服务器端口)和远程端口转发(将远程服务器端口映射到本地端口)两种场景。
AllowTcpForwarding yes,详见后续配置文件部分)。本地端口转发是将本地机器的某个端口映射到远程SFTP服务器的22端口,通过本地端口即可访问远程SFTP服务。
使用ssh -L命令创建本地隧道,格式如下:
ssh -L local_port:remote_sftp_host:22 user@ssh_server
local_port:本地机器监听的端口(如2222,需未被占用);remote_sftp_host:远程SFTP服务器的主机名或IP(如example.com或192.168.1.100);user:SSH服务器的登录用户名;ssh_server:SSH跳板机的主机名或IP(若SFTP服务器与SSH服务器为同一台机器,此处填写SFTP服务器IP)。示例:将本地2222端口转发到example.com的22端口(SFTP端口),使用user用户登录SSH服务器:
ssh -L 2222:example.com:22 user@example.com
验证连接:在另一个终端窗口,使用sftp命令通过本地端口连接:
sftp -P 2222 localhost
若提示sftp>,则说明转发成功。
编辑本地~/.ssh/config文件(若不存在则创建),添加以下内容:
Host remote_sftp # 自定义别名,方便记忆
HostName remote_sftp_host # 远程SFTP服务器IP/主机名
User user # SSH用户名
LocalForward 2222 localhost:22 # 本地端口转发配置
保存后,直接使用ssh remote_sftp命令即可建立隧道,无需重复输入长命令。
远程端口转发是将远程服务器的某个端口映射到本地机器的22端口,适用于需要从外部(如公司内网外的服务器)访问本地SFTP的场景。
使用ssh -R命令创建远程隧道,格式如下:
ssh -R remote_port:localhost:22 user@ssh_server
remote_port:远程服务器监听的端口(如3333,需SSH服务器允许);localhost:本地机器(指代运行ssh命令的机器);user:SSH服务器的登录用户名;ssh_server:SSH跳板机的主机名或IP。示例:将远程服务器ssh.example.com的3333端口转发到本地的22端口,使用user用户登录SSH服务器:
ssh -R 3333:localhost:22 user@ssh.example.com
验证连接:在远程服务器上,使用sftp命令通过远程端口连接:
sftp -P 3333 localhost
若提示sftp>,则说明转发成功。
编辑本地~/.ssh/config文件,添加以下内容:
Host remote_forward # 自定义别名
HostName ssh_server # SSH跳板机IP/主机名
User user # SSH用户名
RemoteForward 3333 localhost:22 # 远程端口转发配置
保存后,使用ssh remote_forward命令即可建立隧道。
默认情况下,SSH隧道会随终端关闭而断开。若需保持隧道持续运行,可使用以下方法:
nohup命令将ssh命令放入后台运行,忽略挂断信号:
nohup ssh -L 2222:example.com:22 user@example.com &
隧道会在后台持续运行,即使关闭终端也不会断开。
autossh工具(推荐)autossh是一款自动监控SSH连接状态的工具,可在连接断开时自动重连。
autossh:
sudo yum install autossh;sudo apt install autossh。autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -L 2222:example.com:22 user@example.com
-M 0:禁用autossh的监控端口(使用SSH内置机制);-o "ServerAliveInterval 30":每30秒发送一次心跳包,保持连接活跃;-o "ServerAliveCountMax 3":若连续3次心跳失败,则断开并重连。/etc/ssh/sshd_config文件,设置:AllowTcpForwarding yes # 允许TCP转发
GatewayPorts yes # 允许远程主机连接本地转发端口(仅远程转发需要)
修改后重启SSH服务:sudo systemctl restart sshd # CentOS/Ubuntu通用
sudo firewall-cmd --permanent --add-port=2222/tcp # 开放本地端口
sudo firewall-cmd --reload
sudo ufw allow 2222/tcp # 开放本地端口
ssh-keygen -t rsa # 生成密钥对
ssh-copy-id user@example.com # 复制公钥至SSH服务器
之后连接时无需输入密码。通过以上步骤,即可完成SFTP端口转发设置,实现安全的文件传输。根据实际场景选择本地或远程转发,结合持久化工具可确保隧道稳定运行。