SSH隧道

ffy Lv3

在进行服务器运维时,经常会遇到需要代理来访问某些资源的情况。本文将介绍如何通过 SSH 隧道,让远程服务器共享使用本地电脑的代理,实现优雅的科学上网解决方案。

背景

通常我们在本地电脑上都配置了代理软件(如 Clash),但远程服务器往往没有代理。如何让远程服务器也能使用上我们本地的代理呢?这就需要用到 SSH 的端口转发功能。

原理解释

SSH 隧道技术允许我们将本地端口转发到远程服务器。通过建立一个加密的通道,远程服务器可以通过这个通道访问本地电脑的代理服务。

1
[远程服务器] <--- SSH隧道 ---> [本地电脑] <--- 代理 ---> [互联网]

具体步骤

1. 前提条件

  • 本地电脑已安装并运行代理软件(如 Clash,默认端口 7890)
  • 能够通过 SSH 连接到远程服务器
  • 确保本地代理软件正常工作

2. 建立 SSH 隧道

在本地电脑的终端中执行:

1
ssh -R 7890:127.0.0.1:7890 -o ServerAliveInterval=60 -o ServerAliveCountMax=3 用户名@服务器IP

参数说明:

  • -R 7890:127.0.0.1:7890:将远程服务器的 7890 端口转发到本地的 7890 端口
  • -o ServerAliveInterval=60:每 60 秒发送一次心跳包
  • -o ServerAliveCountMax=3:最多允许丢失 3 次心跳包

然后根据提示输入服务器用户的密码:

3. 配置服务器代理

在服务器终端中执行:

1
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

4. 验证代理是否生效

在服务器上执行:

1
curl -v https://github.com

如果能够正常访问,说明代理配置成功。

持久化配置

如果想让代理设置持久生效,可以将代理配置命令添加到 Shell 的配置文件中:

1
2
3
4
5
# 编辑 ~/.bashrc 或 ~/.zshrc
echo 'export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890' >> ~/.bashrc

# 重新加载配置
source ~/.bashrc

注意事项

  1. 安全性考虑:SSH 隧道是加密的,相对安全
  2. 连接维护:保持 SSH 连接不断开,否则代理会失效
  3. 带宽限制:代理流量会经过你的本地电脑,注意带宽占用
  4. 临时使用:这种方法适合临时使用,长期使用建议直接在服务器上配置代理

常见问题排查

  1. 隧道无法建立

    • 检查本地代理是否正常运行
    • 确认端口号是否正确
    • 检查服务器防火墙设置
  2. 代理失效

    • SSH 连接是否断开
    • 本地代理软件是否正常运行
    • 环境变量是否正确设置

Clash设置

在默认的代理设置基础上进行了如下修改, 但是不确保这是正常访问的必须操作:
以mac的ClashX Pro为例, 在更多设置

结论

通过 SSH 隧道共享本地代理是一个简单而优雅的解决方案,特别适合临时需要代理访问的场景。它不需要在服务器上安装额外的软件,配置简单,安全可靠。

  • 标题: SSH隧道
  • 作者: ffy
  • 创建于 : 2025-01-17 13:53:33
  • 更新于 : 2025-05-09 17:36:47
  • 链接: https://ffy6511.github.io/2025/01/17/其他/SSH隧道/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论