怎样设置SFTP的端口转发
SFTP端口转发设置指南(基于SSH隧道)
SFTP(SSH File Transfer Protocol)本质上是SSH协议的扩展,默认通过SSH加密通道传输文件。因此,SFTP端口转发需借助SSH的端口转发功能实现,主要分为本地端口转发(将本地端口映射到远程SFTP服务器端口)和远程端口转发(将远程服务器端口映射到本地端口)两种场景。
一、前提条件
- SSH服务可用:目标SFTP服务器需开启SSH服务(默认端口22),且允许端口转发(需配置
AllowTcpForwarding yes
,详见后续配置文件部分)。 - 网络连通性:本地机器与SSH服务器/SFTP服务器之间网络可达(若存在防火墙,需放行对应端口)。
- 权限准备:拥有SSH服务器的登录用户名及密码/密钥(密钥认证更安全,推荐使用)。
二、本地端口转发(常用场景:从本地访问远程SFTP)
本地端口转发是将本地机器的某个端口映射到远程SFTP服务器的22端口,通过本地端口即可访问远程SFTP服务。
1. 命令行方式(临时生效)
使用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>
,则说明转发成功。
2. 配置文件方式(永久生效,简化操作)
编辑本地~/.ssh/config
文件(若不存在则创建),添加以下内容:
Host remote_sftp # 自定义别名,方便记忆
HostName remote_sftp_host # 远程SFTP服务器IP/主机名
User user # SSH用户名
LocalForward 2222 localhost:22 # 本地端口转发配置
保存后,直接使用ssh remote_sftp
命令即可建立隧道,无需重复输入长命令。
三、远程端口转发(常用场景:从远程访问本地SFTP)
远程端口转发是将远程服务器的某个端口映射到本地机器的22端口,适用于需要从外部(如公司内网外的服务器)访问本地SFTP的场景。
1. 命令行方式(临时生效)
使用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>
,则说明转发成功。
2. 配置文件方式(永久生效)
编辑本地~/.ssh/config
文件,添加以下内容:
Host remote_forward # 自定义别名
HostName ssh_server # SSH跳板机IP/主机名
User user # SSH用户名
RemoteForward 3333 localhost:22 # 远程端口转发配置
保存后,使用ssh remote_forward
命令即可建立隧道。
四、保持隧道持久化(可选)
默认情况下,SSH隧道会随终端关闭而断开。若需保持隧道持续运行,可使用以下方法:
1. 使用nohup
命令
将ssh
命令放入后台运行,忽略挂断信号:
nohup ssh -L 2222:example.com:22 user@example.com &
隧道会在后台持续运行,即使关闭终端也不会断开。
2. 使用autossh
工具(推荐)
autossh
是一款自动监控SSH连接状态的工具,可在连接断开时自动重连。
- 安装
autossh
:- CentOS:
sudo yum install autossh
; - Ubuntu:
sudo apt install autossh
。
- CentOS:
- 启动持久化隧道:
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次心跳失败,则断开并重连。
五、注意事项
- SSH服务器配置:确保SSH服务器允许端口转发,编辑
/etc/ssh/sshd_config
文件,设置:
修改后重启SSH服务:AllowTcpForwarding yes # 允许TCP转发 GatewayPorts yes # 允许远程主机连接本地转发端口(仅远程转发需要)
sudo systemctl restart sshd # CentOS/Ubuntu通用
- 防火墙设置:开放本地/远程转发端口,避免防火墙拦截:
- CentOS(firewalld):
sudo firewall-cmd --permanent --add-port=2222/tcp # 开放本地端口 sudo firewall-cmd --reload
- Ubuntu(UFW):
sudo ufw allow 2222/tcp # 开放本地端口
- CentOS(firewalld):
- 密钥认证:建议使用SSH密钥替代密码认证,提高安全性。生成密钥对后,将公钥上传至SSH服务器:
之后连接时无需输入密码。ssh-keygen -t rsa # 生成密钥对 ssh-copy-id user@example.com # 复制公钥至SSH服务器
通过以上步骤,即可完成SFTP端口转发设置,实现安全的文件传输。根据实际场景选择本地或远程转发,结合持久化工具可确保隧道稳定运行。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 怎样设置SFTP的端口转发
本文地址: https://pptw.com/jishu/721856.html