手里有台 Cloudcone 的闲置小鸡(没有 mjj 要),用开源项目 sish 搭建一个私有的内网穿透服务(类似于 ngrok)。
特点: 客户端无需安装任何软件,只要有 SSH 就能用;服务端自动申请 Let's Encrypt 泛域名证书;配置简单,资源占用极低。客户端使用截图如下:
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.xyz 和 your-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
排坑提示:
- 首次访问 HTTPS 可能会慢几秒,因为在申请证书。
- 只有在 VPS
/opt/sish/pubkeys/里放了公钥的机器才能连上,安全有保障。
有用的话给个鸡腿!
大佬牛
收藏了
也就是说,这个项目的最大特点是客户端无须安装其他软件,是吧?
@Coolday #3 是的
稳定和速度怎么用
@Netsky #5 这个取决于你本地和VPS之间的网络
ssh不是客户端软件吗?