通过 Cloudflare 隧道实现服务器 SSH 访问
通过 Cloudflare 隧道使用 SSH 访问服务器是一种安全且简便的方式,可以在隐藏服务器 IP 地址的同时连接到远程服务器。
适用人群
此设置非常适合以下人群:
- 希望保持服务器 IP 地址私密的人。
- 希望关闭服务器上 SSH 端口的人。
- 不希望依赖静态公网 IP 来访问远程服务器的人。
- 服务器没有静态公网 IP 的人(仅适用于执行手动设置的情况)。
开始之前
- 我们假设您已经运行着一台安装了 Coolify 的服务器,并且正在尝试设置一个隧道,以便将另一台不同的服务器连接到 Coolify。
- 如果您试图在运行 Coolify 的服务器上设置隧道,并且没有其他服务器需要连接,则您不需要 SSH 隧道。Coolify 已经拥有其运行服务器的完全 root 访问权限,因此在这种情况下无需使用 SSH 隧道。
工作原理?
以下是一个简单的高层概述图,帮助您直观地理解其工作原理:
设置方法
有两种设置方式:
- 自动
- 手动
主要区别在于,手动设置需要您自行安装 cloudflared,而在自动设置中,Coolify 会为您完成此操作。
要使用 Coolify 的自动设置来配置 Cloudflare 隧道:
- 在初始设置期间,您的远程服务器必须具有公网 IP 地址和活动的 SSH 端口,以便 Coolify 配置隧道。设置完成后,您可以关闭服务器上的所有端口。
- 如果您的服务器没有公网 IP 地址,则此自动设置不适合您。请改为遵循手动设置指南。
- 您需要一个DNS 由 Cloudflare 管理的域名。
示例数据
以下数据在本指南中用作示例。请按照步骤操作时将其替换为您的实际数据:
- 远程服务器的 IPv4 地址:
192.168.1.93 - SSH 域名:
helixa.shadowarcanist.com - 用户名:
root - SSH 端口:
22
1. 创建私有 SSH 密钥

- 在您的 Coolify 仪表板中,转到密钥与令牌 (Keys & Tokens)
- 点击私有密钥 (Private Keys) 选项卡
- 点击 + 添加 (+ Add) 按钮
系统将提示您选择密钥类型,并为密钥提供名称和描述。

- 点击生成新的 ED25519 或 RSA 按钮以生成新的 SSH 密钥。
- 复制公钥并将其保存在安全的地方(下一步需要用到)。
- 点击 继续 (Continue) 按钮。
2. 将公钥添加到您的服务器
SSH 登录到您要连接到 Coolify 的服务器:
ssh root@192.168.1.93登录后,将您的公钥添加到授权密钥文件中:
echo "<在此引号内粘贴您的公钥>" >> ~/.ssh/authorized_keys3. 将您的服务器添加到 Coolify

- 在您的 Coolify 仪表板中,转到服务器 (Servers)
- 点击 + 添加 (+ Add) 按钮
系统将提示您输入有关服务器的详细信息。请确保提供的信息准确无误,因为 Coolify 将使用这些详细信息来访问您的服务器。

- 名称 (Name) - 选择一个名称,以便在仪表板中轻松识别您的服务器。
- 描述 (Description) -(可选)为您的服务器提供描述。
- IP 地址/域名 (IP Address/Domain) - 输入服务器的公网 IP 地址。
- 端口 (Port) - 输入服务器用于 SSH 连接的端口号。
- 用户 (User) - 输入 Coolify 将使用的用户名(该用户应在服务器上具有 root 权限)。
- 私有密钥 (Private key) - 选择您在步骤 1 中创建的私有密钥
- 填写完详细信息后,点击 继续 (Continue) 按钮。
4. 在 Coolify 上验证您的服务器
要验证您的服务器,只需点击 验证服务器并安装 Docker 引擎 (Validate Server & Install Docker Engine) 按钮。

在此过程中,Coolify 将登录到您的服务器并设置 Coolify 使用服务器所需的一切。
验证完成后,您的服务器页面将如下所示:

5. 创建 Cloudflare 隧道
要创建 Cloudflare 隧道,首先登录到您的 Cloudflare 仪表板

- 转到侧边栏中的 网络 (Networking)。
- 点击 隧道 (Tunnels)
- 点击 创建隧道 (Create tunnel) 按钮

系统将提示您输入隧道名称。输入您喜欢的名称,然后点击 创建隧道 (Create tunnel) 按钮。

- 选择 Docker 选项
- 复制 docker run 命令,其中包含您隧道的令牌(令牌以 "
eyJ" 开头)。请确保仅保存令牌,删除其前面的命令部分,并将其存储在安全的地方,因为稍后我们需要用到它。
6. 在 Coolify 上配置 Cloudflare 隧道

- 在您的 Coolify 仪表板中,转到 Cloudflare 隧道 (Cloudflare Tunnel)
- 在手动部分输入您的 Cloudflare 令牌 (Cloudflare Token) 和 SSH 域名 (SSH Domain)
- 点击 继续 (Continue) 按钮
提示
Cloudflare 令牌包含在您在上一步中复制的 docker run 命令 中。令牌以 eyJ 开头。
一旦 cloudflared 开始运行,您将能够在 Cloudflare 仪表板上看到其状态:

点击继续按钮以创建隧道。
7. 配置隧道路由
- 点击您的隧道
- 点击 配置 (Configure) 选项

- 选择 路由 (Routes)。
- 点击 添加路由 (Add route) 按钮

- 选择 已发布的应用程序 (Published Application) 作为路由类型

- 子域名 (Subdomain) -(可选)您可以使您的资源在任何子域名/域名上可访问。在本指南中,我们使用
helixa子域名。 - 域名 (Domain) - 选择您要用于隧道的域名。
- 路径 (Path) - 留空此字段。
- 服务 URL (Service URL) - 输入 ssh://localhost:22(这非常重要)。如果您的 SSH 端口不是 22,请使用该端口号。
- 填写完详细信息后,点击 添加路由 (Add route) 按钮。


配置好隧道后,Coolify 会自动将服务器 IP 地址更改为 Cloudflare SSH 域名。
如果它没有自动更新,请在此处手动将 IP 地址更改为 SSH 域名:

恭喜! 您已成功设置了一台可以通过 Coolify 使用 Cloudflare 隧道通过您的域名进行 SSH 访问的服务器。
现在,如果您愿意,可以阻止服务器上的 SSH 端口。
To manually setup Cloudflare Tunnel:
- 您需要访问远程服务器以安装 cloudflared(您的服务器不需要公网 IP)。
- 您需要一个 DNS 由 Cloudflare 管理 的域名。
示例数据
以下数据在本指南中用作示例。请按照步骤操作时将其替换为您的实际数据:
- 远程服务器的 IPv4 地址:
192.168.1.93 - SSH 域名:
helixa.shadowarcanist.com - 用户名:
root - SSH 端口:
22
1. 创建私有 SSH 密钥

- 在您的 Coolify 仪表板中,转到密钥与令牌 (Keys & Tokens)
- 点击私有密钥 (Private Keys) 选项卡
- 点击 + 添加 (+ Add) 按钮
系统将提示您选择密钥类型,并为密钥提供名称和描述。

- 点击生成新的 ED25519 或 RSA 按钮以生成新的 SSH 密钥。
- 复制公钥并将其保存在安全的地方(下一步需要用到)。
- 点击 继续 (Continue) 按钮。
2. 将公钥添加到您的服务器
SSH 登录到您要连接到 Coolify 的服务器:
ssh root@192.168.1.93登录后,将您的公钥添加到授权密钥文件中:
echo "<在此引号内粘贴您的公钥>" >> ~/.ssh/authorized_keys3. 将您的服务器添加到 Coolify

- 在您的 Coolify 仪表板中,转到服务器 (Servers)
- 点击 + 添加 (+ Add) 按钮
系统将提示您输入有关服务器的详细信息。

- 名称 (Name) - 选择一个名称,以便在仪表板中轻松识别您的服务器。
- 描述 (Description) -(可选)为您的服务器提供描述。
- IP 地址/域名 (IP Address/Domain) - 输入您希望通过 Cloudflare 隧道访问服务器的 SSH 域名。
- 端口 (Port) - 输入服务器用于 SSH 连接的端口号。
- 用户 (User) - 输入 Coolify 将使用的用户名(该用户应在服务器上具有 root 权限)。
- 私有密钥 (Private key) - 选择您在步骤 1 中创建的私有密钥
- 填写完详细信息后,点击 继续 (Continue) 按钮。
4. 在 Coolify 上配置 Cloudflare 隧道

- 在您的 Coolify 仪表板中,转到 Cloudflare 隧道 (Cloudflare Tunnel)
- 点击仪表板上信息消息中的 此处 (here) 文本
5. 创建 Cloudflare 隧道
要创建 Cloudflare 隧道,首先登录到您的 Cloudflare 仪表板

- 转到侧边栏中的 网络 (Networking)。
- 点击 隧道 (Tunnels)
- 点击 创建隧道 (Create tunnel) 按钮

系统将提示您输入隧道名称。输入您喜欢的名称,然后点击 创建隧道 (Create tunnel) 按钮。

- 选择 Docker 选项
- 复制 docker run 命令,并在您要连接到 Coolify 的服务器终端上运行它。
提示
默认情况下,docker run 命令以前台模式运行。这意味着如果您关闭终端,cloudflared 容器将停止运行。要使容器在后台保持运行,请在运行命令时添加 -d 标志。
例如:docker run -d cloudflare/...
一旦 cloudflared 开始运行,您将能够在 Cloudflare 仪表板上看到其状态:

点击继续按钮以创建隧道。
6. 配置隧道路由

- 点击您的隧道
- 点击 配置 (Configure) 选项

- 选择 路由 (Routes)。
- 点击 添加路由 (Add route) 按钮

- 选择 已发布的应用程序 (Published Application) 作为路由类型

- 子域名 (Subdomain) -(可选)您可以使您的资源在任何子域名/域名上可访问。在本指南中,我们使用
helixa子域名。 - 域名 (Domain) - 选择您要用于隧道的域名。
- 路径 (Path) - 留空此字段。
- 服务 URL (Service URL) - 输入 ssh://localhost:22(这非常重要)。如果您的 SSH 端口不是 22,请使用该端口号。
- 填写完详细信息后,点击 添加路由 (Add route) 按钮。

7. 在 Coolify 上验证服务器
要验证您的服务器,只需点击 验证服务器并安装 Docker 引擎 (Validate Server & Install Docker Engine) 按钮。

在此过程中,Coolify 将登录到您的服务器并设置 Coolify 使用服务器所需的一切。
验证完成后,您的服务器页面将如下所示:

恭喜! 您已成功设置了一台可以通过 Coolify 使用 Cloudflare 隧道通过您的域名进行 SSH 访问的服务器。
现在,如果您愿意,可以阻止服务器上的 SSH 端口。
已知问题及解决方案
当您在隧道中创建新路由时,Cloudflare 将为该主机名创建 DNS 记录。
但是,如果该主机名的 DNS 记录已存在,Cloudflare 不会更新现有记录。
在这种情况下,您的应用将无法工作。要解决此问题,请按照以下步骤操作:
- 点击您的隧道
- 点击 配置 (Configure) 选项
- 从隧道详细信息部分复制您的隧道 ID。
使用以下详细信息创建新的 DNS 记录:
- 在 Cloudflare 仪表板中,转到 DNS。
- 选择 记录 (Records)。
- 添加 CNAME 记录。
- 输入名称为
*或您的子域名名称(这应与您在隧道中为应用设置的主机名匹配)。 - 对于 目标 (Target),输入隧道 ID 后跟
.cfargotunnel.com - 将代理状态设置为 已代理 (Proxied)。
现在,访问您应用的域名,它应该可以访问了。
