如何通过Linux SFTP实现端口转发,轻松实现远程访问的详细步骤和技巧?
- 内容介绍
- 文章标签
- 相关推荐
在日常运维中,远程文件传输往往是最频繁的操作之一。是当安装部署在私有网络或被防火墙屏蔽时直接使用默认的 SFTP往往会遇到“连不上服务器”或“端口被占用”的痛点。
说到使用者痛点一,网络不通导致连不上服务器
很多同事在内部网或云厂商 VPC 内访问外部 SFTP 时常遇到「Connection refused」或「Connection timed out」。至于这通常是因为,
- 服务器只开放了非标准端口
- 公网 IP 被防火墙限制。只允许特定 IP 或子网访问
- 本地机器被 NAT 或代理屏蔽了直连功能
至于使用者痛点二,手动配置 SSH 隧道繁琐且易出错
每次需要连接不同的服务时都要记住一串 ssh -L ... 命令,且命令行参数易忘、拼写错误,导致连接失败。是在多台机器、多服务交互时更是耗时耗力。
准备工作的观点是,确认 SSH 服务可用且已开启端口转发
确认目标主机已安装并启动 OpenSSH Server,而且配置允许端口转发:
# /etc/ssh/sshd_config
AllowTcpForwarding yes
PermitOpen any
# 重新启动后生效
sudo systemctl restart sshd
说到方法一。使用 SSH 命令行一次性完成本地与远程端口映射
假设你需要把本地的 2222 端口映射到远程服务器 example.com 的 SFTP 端口,同时目标 SFTP 使用非标准端口 60001,则可以执行:
# 建立隧道,将本地2222映射到远程SFTP
ssh -L 2222:example.com:60001
# 随后在另一个终端窗口中使用SFTP连接本地转发的2222号端口:
sftp -oPort=2222 localhost
# 或者直接指定:
sftp -P 2222 localhost
为什么这样做能解决连通性问题?
SSH 隧道会穿透 NAT 与防火墙,仅需保证 SSH 能连通即可;一旦隧道建立,本地就像直接访问目标服务器一样。
方法二这方面,利用 ~/.ssh/config 自动化设置隧道与 SFTP 链接
如果你经常需要同一台服务器。可以把隧道和 SFTP 的配置写进 .ssh/config只需一次命令就可以完成所有操作。
# ~/.ssh/config
Host my-sftp-tunnel
HostName example.com # 外部IP或域名
User your_user # 登录使用者名
Port 22 # SSH默认22,如果不是22请改成实际SSH监听端口
# 本地转发:把本机12345映射到远程example.com的SFTP
LocalForward 12345 localhost:60001
# 指定SFTP使用自定义Port
RemoteCommand sftp -oPort=12345 localhost
# 使用方式:
# 打开SSH会话。同时建立隧道并自动调用SFTP:
ssh my-sftp-tunnel -N # -N表示不执行远程命令,仅保持隧道打开
# 在另一个终端开始进入SFTP:
sftp -P12345 localhost # 自动连接已经映射好的本地12234号接口
至于优点,
- 一次性配置,即可复用多次无需记忆长命令。
- .config 支持多主机、多条隧道,管理方便。
- SCP/SFTP等工具均可通过自定义Port调用,保持一致性。
验证连接是否成功及排查常见错误
-
NAT/防火墙检查: 确保你的机器能够正常 ping 通外部主机。
例如
wget https://example.com/robots.txt -
Ssh日志查看:
/var/log/auth.log /var/log/secure,查看是否有 “Connection closed by” 等信息。 -
<强度TCP监听检查:
netstat -tln | grep :12345 - <强度SFTPD 日志: 查看 /var/log/auth.log 是否有 “Accepted publickey for …老实说,” 表示认证成功。
- <强度Error:“Connection refused” 或 “No route to host” 时: 检查是否正确指定了目标 IP + port,在 .config 中没有拼写错误;确认目标主机上对应服务已启动并监听该port。
小技巧 & 高级场景
-
SCP 同步文件夹快速同步:
scp -r -P12345 ./local_folder username@localhost:/remote/path/
KbdInteractiveAuntication no
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist yes
`即可让多次 sftp/shell 会话共享同一 TCP 链路。
通过上述步骤。你可以彻底摆脱因网络限制导致的“连不上服务器”的烦恼,实现从任意客户端对内部 SFTP 的安全访问。无论是单个项目还是团队协作,只要合理配置 SSH 隧道和 ~/.ssh/config。就能让文件传输变得既安全又端口转发,比较容易做到远程访问的详细步骤和技巧?" src="/img01/1348813907,3819915714&fm=253&fmt=auto&app=138&f=jpg"/>
在日常运维中,远程文件传输往往是最频繁的操作之一。是当安装部署在私有网络或被防火墙屏蔽时直接使用默认的 SFTP往往会遇到“连不上服务器”或“端口被占用”的痛点。
说到使用者痛点一,网络不通导致连不上服务器
很多同事在内部网或云厂商 VPC 内访问外部 SFTP 时常遇到「Connection refused」或「Connection timed out」。至于这通常是因为,
- 服务器只开放了非标准端口
- 公网 IP 被防火墙限制。只允许特定 IP 或子网访问
- 本地机器被 NAT 或代理屏蔽了直连功能
至于使用者痛点二,手动配置 SSH 隧道繁琐且易出错
每次需要连接不同的服务时都要记住一串 ssh -L ... 命令,且命令行参数易忘、拼写错误,导致连接失败。是在多台机器、多服务交互时更是耗时耗力。
准备工作的观点是,确认 SSH 服务可用且已开启端口转发
确认目标主机已安装并启动 OpenSSH Server,而且配置允许端口转发:
# /etc/ssh/sshd_config
AllowTcpForwarding yes
PermitOpen any
# 重新启动后生效
sudo systemctl restart sshd
说到方法一。使用 SSH 命令行一次性完成本地与远程端口映射
假设你需要把本地的 2222 端口映射到远程服务器 example.com 的 SFTP 端口,同时目标 SFTP 使用非标准端口 60001,则可以执行:
# 建立隧道,将本地2222映射到远程SFTP
ssh -L 2222:example.com:60001
# 随后在另一个终端窗口中使用SFTP连接本地转发的2222号端口:
sftp -oPort=2222 localhost
# 或者直接指定:
sftp -P 2222 localhost
为什么这样做能解决连通性问题?
SSH 隧道会穿透 NAT 与防火墙,仅需保证 SSH 能连通即可;一旦隧道建立,本地就像直接访问目标服务器一样。
方法二这方面,利用 ~/.ssh/config 自动化设置隧道与 SFTP 链接
如果你经常需要同一台服务器。可以把隧道和 SFTP 的配置写进 .ssh/config只需一次命令就可以完成所有操作。
# ~/.ssh/config
Host my-sftp-tunnel
HostName example.com # 外部IP或域名
User your_user # 登录使用者名
Port 22 # SSH默认22,如果不是22请改成实际SSH监听端口
# 本地转发:把本机12345映射到远程example.com的SFTP
LocalForward 12345 localhost:60001
# 指定SFTP使用自定义Port
RemoteCommand sftp -oPort=12345 localhost
# 使用方式:
# 打开SSH会话。同时建立隧道并自动调用SFTP:
ssh my-sftp-tunnel -N # -N表示不执行远程命令,仅保持隧道打开
# 在另一个终端开始进入SFTP:
sftp -P12345 localhost # 自动连接已经映射好的本地12234号接口
至于优点,
- 一次性配置,即可复用多次无需记忆长命令。
- .config 支持多主机、多条隧道,管理方便。
- SCP/SFTP等工具均可通过自定义Port调用,保持一致性。
验证连接是否成功及排查常见错误
-
NAT/防火墙检查: 确保你的机器能够正常 ping 通外部主机。
例如
wget https://example.com/robots.txt -
Ssh日志查看:
/var/log/auth.log /var/log/secure,查看是否有 “Connection closed by” 等信息。 -
<强度TCP监听检查:
netstat -tln | grep :12345 - <强度SFTPD 日志: 查看 /var/log/auth.log 是否有 “Accepted publickey for …老实说,” 表示认证成功。
- <强度Error:“Connection refused” 或 “No route to host” 时: 检查是否正确指定了目标 IP + port,在 .config 中没有拼写错误;确认目标主机上对应服务已启动并监听该port。
小技巧 & 高级场景
-
SCP 同步文件夹快速同步:
scp -r -P12345 ./local_folder username@localhost:/remote/path/
KbdInteractiveAuntication no
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist yes
`即可让多次 sftp/shell 会话共享同一 TCP 链路。
通过上述步骤。你可以彻底摆脱因网络限制导致的“连不上服务器”的烦恼,实现从任意客户端对内部 SFTP 的安全访问。无论是单个项目还是团队协作,只要合理配置 SSH 隧道和 ~/.ssh/config。就能让文件传输变得既安全又端口转发,比较容易做到远程访问的详细步骤和技巧?" src="/img01/1348813907,3819915714&fm=253&fmt=auto&app=138&f=jpg"/>

