logo NodeSeekbeta

闲置小鸡自建 sish 反向隧道,一行命令把本地服务暴露到公网

手里有台 Cloudcone 的闲置小鸡(没有 mjj 要),用开源项目 sish 搭建一个私有的内网穿透服务(类似于 ngrok)。

特点: 客户端无需安装任何软件,只要有 SSH 就能用;服务端自动申请 Let's Encrypt 泛域名证书;配置简单,资源占用极低。客户端使用截图如下:

image

0. 前置准备

  • 一台有公网 IP 的 Linux VPS
  • 一个域名(托管在 Cloudflare 最佳)

1. Cloudflare DNS 解析

在 Cloudflare 后台,添加一条 A 记录

  • Name: * (泛解析)
  • Content: 你的VPS_IP
  • Proxy status: DNS only (灰云),不要开小黄云。

(可选:也可以单独解析一个 ssh.your-domain.xyz 指向 IP,方便连接)


2. 修改系统默认 SSH 端口 (防冲突)

因为我们要让 sish 占用 22 端口(为了客户端连接方便),必须先把 VPS 本身的 SSH 端口移走。

vim /etc/ssh/sshd_config 修改:

Port 10000  # 改成你喜欢的端口
#Port 22    # 注释掉默认的

重启 SSH 服务:systemctl restart sshd
注意: 之后连接 VPS 管理记得用 -p 10000。同时记得在防火墙放行 10000、80、443。


3. 安装 sish 与环境配置

直接复制粘贴,完成用户创建、目录建立和公钥生成:

# 1. 创建用户和目录
useradd --system --home /opt/sish --shell /usr/sbin/nologin sish || true
mkdir -p /opt/sish/{ssl,keys,pubkeys,templates}
chown -R sish:sish /opt/sish

# 2. 下载二进制 (以 amd64 为例,arm 请自行去 release 页下载)
cd /tmp
wget https://github.com/antoniomika/sish/releases/download/v2.20.0/sish-2.20.0.linux-amd64.tar.gz
tar -xvf sish-2.20.0.linux-amd64.tar.gz
cd sish-2.20.0.linux-amd64/
install -m 0755 sish-2.20.0.linux-amd64/sish /usr/local/bin/sish

# 3. 下载默认模板
git clone --depth 1 https://github.com/antoniomika/sish.git /tmp/sish-src
cp -r /tmp/sish-src/templates/ /opt/sish/
chown -R sish:sish /opt/sish/templates

# 4. 生成服务端 Host Key
sudo -u sish ssh-keygen -t ed25519 -N "" -f /opt/sish/keys/ssh_host_ed25519_key
rm /opt/sish/keys/ssh_host_ed25519_key.pub

4. 配置鉴权(公钥模式)

为了防止被白嫖,建议开启公钥白名单。
在你的本地电脑(客户端) 查看公钥:cat ~/.ssh/id_ed25519.pub
在 VPS 上,把你的公钥写入白名单:

# 替换下面的 '你的公钥内容'
echo "你的公钥内容......" > /opt/sish/pubkeys/me.pub
chown sish:sish /opt/sish/pubkeys/me.pub

5. 配置 Systemd 服务

创建 /etc/systemd/system/sish.service
请务必修改下面配置中的 your-domain.xyzyour-email

[Unit]
Description=sish tunnel server
After=network-online.target
Wants=network-online.target

[Service]
User=sish
Group=sish
WorkingDirectory=/opt/sish
# 允许非 root 用户绑定 80/443/22
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=true

ExecStart=/usr/local/bin/sish \
  --ssh-address=:22 \
  --http-address=:80 \
  --https-address=:443 \
  --domain=your-domain.xyz \
  --authentication=true \
  --authentication-password="" \
  --authentication-keys-directory=/opt/sish/pubkeys \
  --private-keys-directory=/opt/sish/keys \
  --https \
  --https-certificate-directory=/opt/sish/ssl \
  --https-ondemand-certificate \
  --https-ondemand-certificate-accept-terms \
  --https-ondemand-certificate-email=your-email \
  --bind-random-subdomains=false \
  --force-requested-subdomains=true

Restart=always
RestartSec=2
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

启动服务:

systemctl daemon-reload
systemctl enable --now sish
systemctl status sish

6. 如何使用(真·一行命令)

假设你在本地 8080 端口跑了个 web 服务,想映射到公网 dev.your-domain.xyz

在本地终端执行(无需安装客户端,直接用 SSH):

ssh -R dev:80:127.0.0.1:8080 ssh.your-domain.xyz

如果连接成功,直接访问:

  • https://dev.your-domain.xyz (自动申请 SSL 证书)
  • http://dev.your-domain.xyz

排坑提示:

  1. 首次访问 HTTPS 可能会慢几秒,因为在申请证书。
  2. 只有在 VPS /opt/sish/pubkeys/ 里放了公钥的机器才能连上,安全有保障。

有用的话给个鸡腿!

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有59946位seeker

🎉欢迎新用户🎉