news 2026/5/7 4:57:20

通过 SSH 实现云服务器代理到本机

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
通过 SSH 实现云服务器代理到本机

通过 SSH 实现云服务器代理到本机


改了几十遍,真改不动了

本文部分章节因平台审核策略调整已做删减,完整内容可参见 https://juejin.cn/post/7405158247593050152

通过 SSH 转发到本机

有时候,我们可能需要在云服务器上安装一些软件,但由于网络问题(内网限制等)导致无法下载。此时如果本地计算机恰巧能访问对应资源(或者有能访问对应资源的代理),那我们可以通过 SSH 实现端口转发,将云服务器的请求转发到本地计算机再中转出去从而解决这一问题。

此方法还可用于"内网中某服务器想安装东西却无法下载,但内网中的本机可以下载"等情况(尽管这种情况并不多见)。

注:本文章不涉及任何翻墙内容,仅从技术层面讨论 SSH 的端口转发功能,请大家遵守网络守则,共同营造一个良好的网络氛围与安全的网络环境。

我的思路为 服务器:端口 a -> 本地计算机:端口 b -> 流量中转软件 -> 目标资源

可以使用不做任何配置的 cl*sh-verge-rev 或者 v2r*yN 作为中转的软件(或者其他能将流量转出去的软件也行)

如果本地计算机的代理软件端口为 7890,则可以将云服务器 1080 端口转发到本机 7890 端口:

ssh-R1080:127.0.0.1:7890 用户名@云服务器IP# 或者(服务器IP是可以省略的)ssh-R云服务器IP:1080:127.0.0.1:7890 用户名@云服务器IP

Termius中可以通过Port Forwarding功能实现,和上面的代码差不多,更方便一点

此时我们在服务器上使用curl IP查询网站加上转发参数,查看当前 IP 会发现变成了本机计算机的 IP

curl4.ipw.cn-x127.0.0.1:1080curl4.ipw.cn--socks5127.0.0.1:1080

下面是依次为基准延伸出去的拓展和记录

SSH 远程操作与端口转发

SSH 端口转发(Port Forwarding)可以通过加密的 SSH 通道在本地和远程主机之间转发网络流量

有三种主要类型:

  1. 本地端口转发(Local Port Forwarding)
  2. 远程端口转发(Remote Port Forwarding)
  3. 动态端口转发(Dynamic Port Forwarding)

1. 本地端口转发到远程服务器

使用-L参数可以将本地计算机上的特定端口流量转发到远程服务器上的特定端口。(本地端口->远程端口)

通常用于访问公司内网中的服务器或服务(比如自己放了台电脑在公司,就可以通过这台电脑访问公司内网)

假设host1是本地主机,可以访问外部网络,host2是公司办公电脑,在内网且但可以访问外部网络,host3是公司主机(比如内部数据库)也在内网但无法访问外部网络。此时host1就可以通过host2来访问host3。注:host1 和 host2 可以通过某些方式连接到一个局域网来互相进行访问(例如 tailscale 等工具)

# 在 host1 上运行ssh-L端口2:host3:端口3 user@host2

上面的代码可以将host2的流量可以通过host2 的端口 2转发到host3 的端口 3

注:此时host3的 IP 是相对于host2的来说的,也就是说host3可以是192.168开头的某机器,也可以是localhost(也就是host2自己)。下面是例子:

例如本地计算机需要通过 SSH 访问远程服务器remote_host上的localhost:3306(MySQL 数据库端口),并希望将其映射到本地计算机的端口8888

ssh-L8888:localhost:3306 user@remote_host

这样就能在本地计算机通过localhost:8888访问远程服务器上的 MySQL 服务。此时SSH 命令中的 localhost 是以 remote_host 视角来看的

2. 远程端口转发到本地

使用-R参数可以将远程机器上的特定端口流量转发到本地主机的特定端口。(远程端口->本地端口)

通常用于允许远程计算机访问只有本机网络可以访问的东西。

假设需要将本地计算机上的localhost:8080(例如一个本地 Web 服务器)暴露给远程服务器remote_host的端口9090

ssh-R9090:localhost:8080 user@remote_host

这样远程服务器上的用户能够通过localhost:9090访问你的本地 Web 服务。此时SSH 命令中的 localhost 是以 本地主机 视角来看的

3. 本地动态端口转发到远程服务器

此处因平台审核策略调整已删减,完整内容可参见 https://juejin.cn/post/7405158247593050152

其他参数

  • n 表示关闭标准输入

  • q 表示安静模式。消除所有的警告和诊断信息

  • C 表示压缩数据。在慢速连接上很有用,但在高速网络上反而会降低速度

  • T 表示不为这个连接分配远程终端(TTY)

  • N 表示只连接远程主机,不打开远程 shell(不执行远程命令)

以上参数可以配合使用,比如下面命令表示这个连接只用来传数据,不执行远程操作。

此处因平台审核策略调整已删减,完整内容可参见 https://juejin.cn/post/7405158247593050152

此外视需要还可以增加 -f 参数使 SSH 连接成功后转入后台运行。这样一来就可以在不中断 SSH 连接的情况下,在本地机器执行其他 shell 操作。

注:这些 SSH 没有断线重连功能,链接断了命令就退出了,所以需要些脚本监控重启,或者其他工具保持链接。

临时代理配置

Linux 服务器可以使用以下命令来设置临时代理(当前会话生效)

此处因平台审核策略调整已删减,完整内容可参见 https://juejin.cn/post/7405158247593050152

测试代理

此处因平台审核策略调整已删减,完整内容可参见 https://juejin.cn/post/7405158247593050152

关于登录

SSH 在第一次登录时,由于无法确认 host 主机的真实性,会显示连接主机的密钥指纹,问是否确认接受新的主机密钥(为了防止中间人攻击)

如果有物理访问权限或者可以通过其他安全途径访问服务器,可以使用以下类似的命令来主机秘钥指纹,以便于核对

# 查看ED25519主机秘钥指纹ssh-keygen-lf/etc/ssh/ssh_host_ed25519_key.pub

当输入 yes 接收新的主机指纹后,会保存在~/.ssh/known_hosts文件中,Windows 是C:/Users/用户名/.ssh/known_hosts文件,这个文件会保存可信赖的远程主机的公钥。

注:当远程主机重装系统或者手动更改主机密钥之后,SSH 连接会发现指纹不匹配从而连接失败,此时在确认访问途径安全的情况下,可以使用ssh-keygen -R 远程主机地址来删除旧密钥条目。登录之后可以使用ls -l /etc/ssh/ssh_host_*查看主机秘钥变更的时间。

参考链接

  • SSH 原理与运用(二):远程操作与端口转发 - 阮一峰的网络日志 (ruanyifeng.com)
  • SSH 命令的三种代理功能(-L/-R/-D) - 苍青浪 - 博客园 (cnblogs.com)
  • Linux 服务器使用本地 http 代理访问国外源 - Chancel’s blog
  • 如何在 Termius 中添加带有端口转发的 ssh 命令(使用 -L、-R、-D)_termius 端口转发-CSDN 博客
  • Linux 系统设置全局代理(http 代理,socks 代理)_export sock proxy-CSDN 博客
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 4:57:20

Data URL生成器:前端资源内联优化与纯前端实现详解

1. 项目概述:从“Blobby-Boi/data-URL-Generator”说起最近在整理一个前端小工具集的时候,又用到了Data URL这个老伙计。说实话,这玩意儿就像螺丝刀,平时不觉得多重要,但真到需要的时候,手边没有还真不行。…

作者头像 李华
网站建设 2026/5/7 4:57:19

Nez输入系统完全解析:虚拟按钮、摇杆和触摸输入的完美处理

Nez输入系统完全解析:虚拟按钮、摇杆和触摸输入的完美处理 【免费下载链接】Nez Nez is a free 2D focused framework that works with MonoGame and FNA 项目地址: https://gitcode.com/gh_mirrors/ne/Nez Nez是一款专注于2D游戏开发的免费框架,…

作者头像 李华
网站建设 2026/5/7 4:56:54

AntiDupl.NET:释放存储空间的智能图片管家

AntiDupl.NET:释放存储空间的智能图片管家 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾经在电脑中翻找一张照片,却发现它被埋没在十…

作者头像 李华
网站建设 2026/5/7 4:56:32

Unshackle源码剖析:Python与C++混合编程实现系统级操作

Unshackle源码剖析:Python与C混合编程实现系统级操作 【免费下载链接】unshackle Open-source tool to bypass windows and linux passwords from bootable usb 项目地址: https://gitcode.com/gh_mirrors/un/unshackle Unshackle是一款强大的开源工具&#…

作者头像 李华
网站建设 2026/5/7 4:56:04

开源AI模型API网关:统一接口、多模型路由与免费资源管理

1. 项目概述:一个聚合AI模型的API网关最近在折腾AI应用开发,发现一个挺有意思的开源项目,叫“GetGoAPI/Free-GPT-Grok-Gemini-Claude-API”。光看名字,就能猜到个大概:这是一个能让你免费或低成本调用多个主流大语言模…

作者头像 李华
网站建设 2026/5/7 4:55:04

Buck电路电感值、电容值计算

0. 结论当然,实际使用的电容计算值要考虑负载的波动,一般来说其电容值要远远大于此计算值1. Buck电路的伏秒平衡通常BUCK芯片的基本拓扑如下:内部集成了开关管以及其驱动器,外围电路包括输入、电感、二极管以及输出电容。图1 与 图…

作者头像 李华