Cloudflared代理SSH
目录
昨天突然发现公司网络连不上我的 VPS,使用手机流量又可以连上,应该是被屏蔽了。既然Cloudflared可以代理容器的服务,为啥不用来代理SSH呢?问了一下AI,发现这是可行的,于是就有了这篇文章。
安装 Cloudflared
详细安装 Cloudflared 可以参考 Cloudflared反代容器服务。这里只说明容器中的 Cloudflared 反代宿主机 SSH 服务的一些配置。compose 文件如下:
services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: unless-stopped
command: tunnel --no-autoupdate run
volumes:
- ./config:/etc/cloudflared
environment:
- TUNNEL_TOKEN=your_token
networks:
- tunnel
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
tunnel:
external: true其中多加了两个配置:
volumes: 增加了配置目录映射。extra_hosts: 增加了host.docker.internal,以便让 Cloudflared 可以访问到宿主机的 SSH 服务。
在config目录下创建一个 config.yaml 文件,内容如下:
tunnel: your-tunnel-id
credentials-file: /etc/cloudflared/your-tunnel-id.json
ingress:
- hostname: ssh.your-domain
service: ssh://host.docker.internal:22
- service: http_status:404然后启动 Cloudflared 容器:
docker compose up -d配置 SSH 代理
回到 Zero Trust 隧道配置页面,添加一个到 SSH 的路由,具体参考Cloudflared反代容器服务:
- Subdomain:
ssh - Domain: 选择自己托管的域名
- Service Type:
SSH - URL:
host.docker.internal:22
如下图所示:

SSH 客户端登录
Cloudflare 隧道提供了一个 SSH 登录方式:使用 cloudflared 客户端作为 ProxyCommand。首先需要安装 cloudflared 程序到本地,具体安装方法参考官方文档。
安装完后,使用下面的命令即可登录:
ssh -o ProxyCommand="cloudflared access ssh --hostname %h" user@ssh.your-domainPUTTY 配置(可选)
在 PuTTY → Proxy → Command to send to proxy 填入:
cloudflared access ssh --hostname %hostProxy type 选择 Local。如下图所示:

这样配置完后,就可以使用 Putty 登录了。
SSH 配置
如果不想每次命令行都输入 cloudflared 命令,可以在 ~/.ssh/config 中添加以下配置:
Host ssh.your-domain
User user
ProxyCommand cloudflared access ssh --hostname %h
IdentityFile ~/.ssh/your-private-key (如果开启了公钥认证)
Port 22总结
使用 Cloudflared 可以非常轻松地代理 SSH,绕过公司对 SSH 的屏蔽。