cloudflared 是 Cloudflare 官方提供的一个命令行程序,主要用于建立 Cloudflare Tunnel(Cloudflare 隧道)。

简单来说:

它可以让没有公网 IP、没有开放入站端口的 Ubuntu 服务器,通过主动连接 Cloudflare 的网络,让外部用户访问你部署在家里的服务。

默认你已经在ubuntu上部署了cloudflared,如果没有请看我的这篇博文cloudflare tunnels实现内网穿透,本地网站上传到公网,ssh连接设备

本教程使用mac进行操作,如果你是其他操作系统原理也是类似的

主要就是安装cloudflared并配置相关连接的操作

准备事项:

1.一台个人电脑,比如mac

2.已经部署好cloudflared的内网设备如ubuntu

3.一个已经托管在cloudflare的自用域名

现在开始!

第一步:确认 Ubuntu 的 SSH 服务

在家庭 Ubuntu 上执行:

sudo apt update
sudo apt install openssh-server -y

启动 SSH:

sudo systemctl enable --now ssh

检查状态:

sudo systemctl status ssh

看到 active (running) 就说明 SSH 服务正常运行。

再查看 Ubuntu 用户名:

whoami

假设输出:

xizi

那么之后 SSH 用户名就是 xizi。你的可能是root用root就好啦!

本地测试:

ssh xizi@localhost

确认可以正常登录后退出:

exit

配置好了之后还有很重要的一点linux操作系统有些时候会禁止ssh登陆root使用密码!

跟着我的操作更改一下config!

如果你想让 Ubuntu 允许通过 SSH 使用用户名和密码登录,需要修改 SSH 服务端的配置文件 sshd_config。

第一步:修改 SSH 配置

在 Ubuntu 上执行:

sudo nano /etc/ssh/sshd_config

找到下面几个配置项。如果前面有 #,需要去掉注释;如果没有,就修改对应的值:

PasswordAuthentication yes
KbdInteractiveAuthentication yes
UsePAM yes

另外检查是否存在:

PermitRootLogin yes

注意: 如果你打算使用 root 账号登录,才需要考虑这一项。更建议使用普通用户登录,不要开放 root 密码远程登录。

第二步:检查配置是否正确

保存文件后执行:

sudo sshd -t

如果没有任何输出,通常表示配置语法正确。

第三步:重启 SSH 服务

sudo systemctl restart ssh

确认 SSH 正在运行:

sudo systemctl status ssh

第二步:在macbook上安装cloudflared

打开 Mac 终端。

如果你已经安装 Homebrew:

brew install cloudflared

如果你没有安装homebrew

请到这里安装homebrew官网

复制官网的这段命令到你的终端并回车即可安装homebrew!

检查安装:

cloudflared --version

第三步:在cloudflare的dashboard里配置ssh连接入口

位置如图

然后我们点击reverse- home如果不知道这个看之前的博客上文有提起,进去配置路由

路由配置界面如图

子域名可以填ssh作为一个标记 ,域填写你的域名即可,路径不用填,服务url如上图即可本地回环的22口

这样的话即使你家里设备的内网ipv4更换丝毫没有影响

第四步:在macbook上建立连接并简化路径

一切都配置好了你需要通过mac(外网设备)连接到内网ubuntu

正确的命令是:

ssh -o ProxyCommand="cloudflared access ssh --hostname %h" 用户名@ssh.blogxizi.site

重点说最后这几个字段

用户名@ssh.blogxizi.site

用户名根据你的实际用户名填写,应该是root,@后面的内容应该是ssh.你的域名

正常来说你再此步之后输入密码并回车即可进入ubuntu

但这个命令太长了所以我们决定简化一下路径!

可以在 Mac 上配置 SSH 别名。以后只需要输入:

ssh home-ssh

第一步:编辑 SSH 配置文件

在 Mac 终端执行:

nano ~/.ssh/config

如果文件不存在,Nano 会自动创建。

第二步:添加配置

写入以下内容:

Host home-ssh
    HostName ssh.blogxizi.site  #这里要填你自己的
    User xizi #这个是我的用户名,需要你自己的
    ProxyCommand cloudflared access ssh --hostname %h

保存并退出:

  • Control + O 保存

  • 回车确认

  • Control + X 退出

第三步:设置文件权限

chmod 700 ~/.ssh
chmod 600 ~/.ssh/config

第四步:直接连接

以后在 Mac 终端输入:

ssh home-ssh

配置完成

SSH 会自动使用:

  • 域名:ssh.blogxizi.site

  • 用户名:xizi

  • Cloudflare Tunnel:cloudflared

  • SSH 认证:按照 Ubuntu SSH 服务端的配置进行。