- 所有文章/
初探 Cloudflare 零信任 — 通过 Cloudflare Tunnel 搭建 SSH 聊天室
本文目录
前言 #
ssh-chat 是一个 Golang 编写的自定义 SSH 服务器,用户登录这个 SSH 会得到一个终端里的在线聊天室(而不是一个 Shell 环境)。它跟您的服务器正常登录的 SSH 不会冲突,主要特性有:
- 通过 SSH 访问聊天室
- 用户可以互相私信,隐藏/仅显示指定用户的消息
- 支持白名单/黑名单
- 设置颜色主题
- 管理员可以踢出不友好的用户
- 给消息添加时间戳前缀
- 可以通过用户的 SSH 公钥确认身份
在源服务器未开放任何防火墙端口的情况下,Cloudflare Tunnel 可以安全的代理 SSH 隧道,不必担心 SSH 服务被攻击,亦或是用户 IP 泄漏,能有效地保护源服务器的安全。
部署 ssh-chat #
ssh-chat 是 Golang 编写的,没有特殊需求,我们下载编译好的 二进制文件 就可以了,支持 Linux, macOS, FreeBSD, Windows
本文以 Ubuntu 22.04.1 LTS x86_64 为例,当前登录正常 SSH 的用户名为 ubuntu
# 当前路径
pwd
/home/ubuntu
开始部署(以 ssh-chat 监听在服务器本地 5566 端口为例)
# 下载编译好的 Linux x64 二进制程序到
export LATEST_SSHCHAT=$(curl -s https://api.github.com/repos/shazow/ssh-chat/releases | grep -om1 "https://.*/ssh-chat-linux_amd64.tgz") && \
wget "${LATEST_SSHCHAT}" && \
sudo tar -xf ssh-chat-linux_amd64.tgz -C /opt
# ssh-chat 程序路径为 /opt/ssh-chat/ssh-chat
# 修改 ssh-chat 监听端口为 5566
sudo sed -i -e '/^Port/s/^.*$/Port 5566/' /etc/ssh/sshd_config && \
sudo service ssh restart
# 在当前用户目录生成一对用户 ssh-chat 的 OpenSSH 密钥对
# 将 /home/ubuntu 替换成你自己的用户目录
sudo ssh-keygen -t ed25519 -N '' -f /home/ubuntu/.ssh/chat
# 当前用户目录的 .ssh 目录下
# 生成了用于 ssh-chat 的密钥对如下:
# 私钥文件 /home/ubuntu/.ssh/chat
# 公钥文件 /home/ubuntu/.ssh/chat.pub
# 登录正常 SSH 的公钥路径(指定管理员的公钥)
# /home/ubuntu/.ssh/authorized_keys
设置进程守护
# 新建一个 Systemd 服务
sudo vim /etc/systemd/system/ssh-chat.service
# 写入以下内容
# 根据实际修改
# 用户 ssh-chat 的私钥路径
# /home/ubuntu/.ssh/chat
# 用于 ssh-chat 管理员的公钥路径
# /home/ubuntu/.ssh/authorized_keys
[Unit]
Description=ssh-chat
After=network.target
[Service]
Type=simple
User=root
#You can store keys ouside of root and comment out 'User=root' then uncomment 'User=nobody'
#User=nobody
ExecStart=/opt/ssh-chat/ssh-chat --bind=":5566" -i="/home/ubuntu/.ssh/chat" --admin="/home/ubuntu/.ssh/authorized_keys"
AmbientCapabilities=CAP_NET_BIND_SERVICE
Restart=always
[Install]
WantedBy=multi-user.target
开始运行 ssh-chat
sudo systemctl daemon-reload && \
sudo systemctl enable ssh-chat && \
sudo systemctl start ssh-chat && \
sudo systemctl status ssh-chat
ssh-chat 已经在本地 5566 端口跑起来了
配置 Cloudflare SSH Tunnel #
我这台服务器之前安装过了 Cloudflared,如果您现在的源服务器还没有安装 Cloudflared,可参考 配置 Cloudflare Tunnel 安装和添加 Tunnel。
登录 Cloudflare Zero Trust 控制台,左侧导航菜单选择 Access,进入 Tunnels 子菜单,在连接的 Tunnel 里点击 Add a public hostname 添加一个主机名隧道
添加监听的 SSH 端口即可
点击 Save 保存设置,现在我们的 SSH Chat 聊天室已经可以准备就绪了。
加入聊天室 #
由于我们没有向公网暴露 SSH Chat 的端口,所以要加入聊天室的朋友们需要现在自己的个人电脑上安装 Cloudflared 并新增一条 SSH 配置(不会影响其他 SSH 配置),以 macOS 为例
# 安装 Cloudflared
brew install cloudflared
# 查看 Cloudflared 路径
which cloudflared
/opt/homebrew/bin/cloudflared
# 编辑 SSH 配置文件
vim vim ~/.ssh/config
添加以下配置(以我刚刚搭建的 ssh-chat 为例)
- 将 ssh.dejavu.moe 替换成您自己部署的主机名
- 将 /opt/homebrew/bin/cloudflared 替换成您的个人电脑上 Cloudflared 的路径
Host ssh.dejavu.moe
ProxyCommand /opt/homebrew/bin/cloudflared access ssh --hostname %h
我们的 SSH Chat 聊天室已经开放,如果您想进来玩,只需要在您的个人电脑上安装 Cloudflared,然后修改 SSH 配置就可以啦 🥸,我们公开信息如下:
主机名
ssh.dejavu.moe
默认公钥信息如下:
ssh.dejavu.moe ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOME3xkK54l+R1opuF5FdybtQVVpeZxulnreYP/H6kof
指纹
SHA256:11jXwBM5F5/WDSLeTnkl/CcUlYRV3iukdriAptoAySI
加入后使用 /help
获取命令帮助,就可以开始聊天啦~
参考资料: