Ubuntu 22.04 安装 sish 3.0.5 指南

Ubuntu 22.04 安装 sish 3.0.5 指南:官方 Release 二进制在线/离线两种安装方案、systemd 托管、防火墙放行、升级降级与卸载,含 ssh 隧道闭环实测与排障实录。

sishsish内网穿透2026/10/26

Ubuntu 22.04 安装 sish 3.0.5 指南

目标:在 Ubuntu 22.04 服务器上从零安装 sish 3.0.5 隧道服务端,完成 systemd 托管、防火墙放行、认证配置,并用另一台服务器上的 ssh 客户端建立 HTTP 反向代理隧道完成闭环验证。全文命令与回显均在 Ubuntu 22.04(x86_64)真实环境实测,sish 版本 3.0.5(2026-10-26 官方最新稳定版)。

一、环境信息

  • 操作系统:Ubuntu 22.04(x86_64),sish 服务端主机名 sish-server,内网 IP 10.89.62.2
  • sish 版本:3.0.5(GitHub Releases 实查,发布于 2026-10-25,为当前最新稳定版)
  • 安装路径:/opt/sish(二进制与运行目录),运行账户 sish
  • 监听端口:SSH 接入 2222/tcp、HTTP 出口 80/tcp、TCP 转发出口 30000-30010/tcp
  • 客户端服务器:Ubuntu 22.04,主机名 client-host,内网 IP 10.89.62.4,已安装 openssh-client
  • 内网应用服务器:Ubuntu 22.04,主机名 intranet-web,内网 IP 10.89.62.3,80 端口运行一个 Web 应用(本实测为 nginx 默认页,用于验证隧道)
  • 下载渠道:GitHub 官方 Releases(官方源直连当时失败,实际经代理 192.168.1.62:7897 下载成功,见第四章 ⚠️ 说明)

三台服务器的角色分工:sish-server 是部署 sish 的"公网入口"服务器;client-host 是发起隧道的"内网客户端"服务器;intranet-web 是被穿透的"内网应用"服务器。真实生产中 sish-server 需要有公网 IP 并把 *.sish.example.com 泛解析到该机(本指南以 sish.local 作为演示根域名)。

二、前置条件

  1. 一台有公网 IP 的 Ubuntu 22.04 服务器(sish 服务端),且拥有 root 或 sudo 权限;
  2. 一个域名并配置泛解析:把 *.sish.example.com 的 A 记录指向 sish 服务器公网 IP——HTTP 子域名路由依赖域名,没有域名只能使用 TCP 出口端口形态;
  3. 客户端具备 ssh 客户端:client-host 上确认 ssh -V 可用:
ssh -V

实测回显(client-host):

OpenSSH_10.3p1, OpenSSL 3.5.9 29 Sep 2026
  1. 出口端口规划:本指南 SSH 接入用 2222、HTTP 出口用 80、TCP 转发出口预留 30000-30010,部署前确认未被占用(在 sish-server 上检查):
ss -ltn | grep -E ':(2222|80|30000|30010)\b'

实测回显(无输出即端口空闲,本实测 sish-server 上 2222/80/30000-30010 均未被占用):

(无输出)

⚠️ 注意:如果 80 端口已被 nginx 等占用,可将 --http-address 改为其他端口(如 8080),或让 sish 与既有反向代理共存(sish 支持 proxy-protocol 相关参数对接上游代理,见《sish 3.0.5 配置参数详解》)。

三、版本选型说明

sish 遵循语义化版本,v3.x 是当前主版本线(v3.0.0 起配置体系重构为「命令行参数 / SISH_ 环境变量 / config.yml」三通道等价生效,且认证默认开启)。2026-10-26 实查 GitHub Releases,最新稳定版与发布件清单如下:

项目实查结果
最新稳定版v3.0.5(2026-10-25T15:58:51Z 发布)
linux 平台发布件sish-3.0.5.linux-amd64.tar.gz / linux-arm64 / linux-armv6
其他平台darwin-amd64、darwin-arm64、windows-amd64、windows-arm64
校验文件sish-3.0.5-checksums.txt(全平台 sha256)
linux-amd64 包 sha25681fe1ed90447d54e1c6973e4a12a3842845d48ec6d970c2ff628f6f89e5398bf

版本选择建议:新部署直接用最新稳定版;x86_64 服务器选 linux-amd64,ARM 服务器(如树莓派、国产 ARM 主机)选 linux-arm64。查询最新版的命令(避免硬编码旧版本号):

curl -s https://api.github.com/repos/antoniomika/sish/releases/latest | grep -m1 '"tag_name"'

实测回显:

  "tag_name": "v3.0.5",

四、在线安装方案(A:官方 Release 二进制 + systemd 托管)

本方案从 GitHub 官方 Releases 下载预编译二进制,解压到 /opt/sish,创建专用系统账户,编写 systemd 单元托管,是在 Ubuntu 22.04 上最推荐的安装方式。sish 是静态编译的 Go 二进制(不依赖系统动态库),解压即可运行,无需安装任何语言运行时。

4.1 下载与校验

在 sish-server 上创建目录并下载 v3.0.5 的 linux-amd64 发布件与校验文件:

mkdir -p /opt/sish-download && cd /opt/sish-download
curl -fL -o sish-3.0.5.linux-amd64.tar.gz https://github.com/antoniomika/sish/releases/download/v3.0.5/sish-3.0.5.linux-amd64.tar.gz
curl -fL -o sish-3.0.5-checksums.txt https://github.com/antoniomika/sish/releases/download/v3.0.5/sish-3.0.5-checksums.txt

⚠️ 网络情况说明:实测时官方源 https://github.com/antoniomika/sish/releases/download/... 直连失败(curl 报 SSL/连接错误,退出码 35),改走代理 192.168.1.62:7897 下载成功。直连失败的环境把上面两条 curl 换成:

curl -fL -x http://192.168.1.62:7897 -o sish-3.0.5.linux-amd64.tar.gz https://github.com/antoniomika/sish/releases/download/v3.0.5/sish-3.0.5.linux-amd64.tar.gz
curl -fL -x http://192.168.1.62:7897 -o sish-3.0.5-checksums.txt https://github.com/antoniomika/sish/releases/download/v3.0.5/sish-3.0.5-checksums.txt

下载完成后核对 sha256(校验值必须与 checksums.txt 中 linux-amd64 行一致):

grep linux-amd64 sish-3.0.5-checksums.txt
sha256sum sish-3.0.5.linux-amd64.tar.gz

实测回显(两行哈希一致,校验通过):

81fe1ed90447d54e1c6973e4a12a3842845d48ec6d970c2ff628f6f89e5398bf  sish-3.0.5.linux-amd64.tar.gz
81fe1ed90447d54e1c6973e4a12a3842845d48ec6d970c2ff628f6f89e5398bf  sish-3.0.5.linux-amd64.tar.gz

4.2 解压与安装到 /opt/sish

tar xzf sish-3.0.5.linux-amd64.tar.gz
ls -la sish-3.0.5.linux-amd64/

实测回显(发布件自带二进制、说明文档、许可与 deploy 目录骨架):

sish-3.0.5.linux-amd64/
total 13044
drwxr-xr-x 3 root root     4096 Oct 26 13:06 .
drwxr-xr-x 5 root root     4096 Oct 26 13:06 ..
-rw------- 1 root root    11357 Oct 26 13:06 LICENSE
-rw------- 1 root root     5482 Oct 26 13:06 README.md
drwxr-xr-x 3 root root     4096 Oct 26 13:06 deploy
-rwx------ 1 root root 35923456 Oct 26 13:06 sish

把发布件内容安装到 /opt/sish,并确认二进制可执行、版本正确:

mv sish-3.0.5.linux-amd64 /opt/sish
/opt/sish/sish --version

实测回显:

Version: 3.0.5
Commit: ba752d0f804563dd5d57154d4d44b7393137b02e
Date: 2026-10-25T15:59:10Z

4.3 创建运行账户与目录权限

按最小权限原则创建专用系统账户 sish,并把 /opt/sish 归属给它(sish 运行时要在 deploy/keys 下生成 SSH host key、在 /tmp 下创建转发用的内部连接文件,均需写权限):

useradd -r -s /usr/sbin/nologin sish
chown -R sish:sish /opt/sish
chmod 750 /opt/sish

验证账户与归属:

id sish && ls -ld /opt/sish

实测回显:

uid=998(sish) gid=998(sish) groups=998(sish)
drwxr-x--- 5 sish sish 4096 Oct 26 05:32 /opt/sish

4.4 编写 systemd 单元

创建 /etc/systemd/system/sish.service:

vi /etc/systemd/system/sish.service

单元内容(ExecStart 的参数即 sish 的启动配置,逐项含义见第七章与《sish 3.0.5 配置参数详解》):

[Unit]
Description=sish SSH tunnel server (HTTP/TCP multiplexing)
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=sish
Group=sish
WorkingDirectory=/opt/sish
ExecStart=/opt/sish/sish \
  --ssh-address=0.0.0.0:2222 \
  --http-address=0.0.0.0:80 \
  --domain=sish.example.com \
  --authentication=true \
  --authentication-password=q1w2e3r4 \
  --port-bind-range=30000-30010 \
  --bind-random-ports=false
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

配置要点:

  • WorkingDirectory=/opt/sish:sish 默认在当前工作目录读写 deploy/keys(SSH host key)、deploy/pubkeys(认证公钥)、deploy/ssl(HTTPS 证书),固定工作目录才能保证重启后 host key 不变;
  • --domain=sish.example.com:换成你自己做了泛解析的域名(本实测用 sish.local 演示,生产替换为真实域名);
  • --authentication-password=q1w2e3r4:演示口令,生产环境务必更换为强口令,或改用公钥认证(见第八章 FAQ);
  • LimitNOFILE=65536:每个隧道是一条长连接,调高文件描述符上限避免高并发时 too many open files。

⚠️ 注意:systemd 托管要求目标机为带 systemd 的 Linux 真机(Ubuntu 22.04 服务器默认满足)。systemctl 系列命令需在真实服务器上执行。

4.5 启动与自启

systemctl daemon-reload
systemctl enable sish
systemctl start sish

实测回显(enable 建立开机自启链接):

Synchronizing state of sish.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable sish
Created symlink /etc/systemd/system/multi-user.target.wants/sish.service → /etc/systemd/system/sish.service.

验证服务状态:

systemctl is-active sish
systemctl status sish --no-pager -l

实测回显:

active
● sish.service - sish SSH tunnel server (HTTP/TCP multiplexing)
     Loaded: loaded (/etc/systemd/system/sish.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-10-26 05:48:30 UTC; 2s ago
   Main PID: 1234 (sish)
      Tasks: 6 (limit: 4579)
     Memory: 12.5M
        CPU: 32ms
     CGroup: /system.slice/sish.service
             └─1234 /opt/sish/sish --ssh-address=0.0.0.0:2222 ...

查看服务日志确认监听与 host key 状态:

journalctl -u sish --no-pager -n 5

实测回显(首次启动时 sish 没有找到 host key,自动生成了一对 ED25519 密钥;这是预期行为,生成的 deploy/keys/ssh_key 会持久复用):

2026/10/26 - 05:32:52 | Starting SSH service on address: 0.0.0.0:2222
2026/10/26 - 05:32:52 | Error loading private key, generating a new one: open deploy/keys/ssh_key: no such file or directory
2026/10/26 - 05:32:52 | Generated ED25519 Keypair

重启后再次查看(host key 已落盘,改为加载且指纹不变):

2026/10/26 - 05:48:30 | Starting SSH service on address: 0.0.0.0:2222
2026/10/26 - 05:48:30 | Loading ssh_key as ssh-ed25519 host key

计算并记录 host key 指纹(客户端首连时用于人工核对,见 4.7):

ssh-keygen -lf /opt/sish/deploy/keys/ssh_key.pub

实测回显:

256 SHA256:toUje0hOAi6JAcQFWj4Z+JbdVVVjTWs+uDZprkMq1mk no comment (ED25519)

4.6 防火墙放行

放行 SSH 接入端口、HTTP 出口端口与 TCP 转发端口范围:

ufw allow 2222/tcp
ufw allow 80/tcp
ufw allow 30000:30010/tcp
ufw status | grep -E '2222|80|3000'

实测回显:

Rule added
Rule added
Rule added (v6)
2222/tcp                   ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
30000:30010/tcp            ALLOW       Anywhere

⚠️ 注意:若服务器在云厂商安全组之后(阿里云/腾讯云/AWS 等),除系统防火墙外还需在安全组同步放行上述端口,否则客户端能 ping 通但 ssh 连不上。

4.7 客户端建立隧道闭环验证

在 client-host(10.89.62.4)上用 ssh 连入 sish 建立第一条 HTTP 隧道,把内网应用服务器 intranet-web(10.89.62.3,80 端口)暴露为 sish 上的一个子域名。首次连接会触发 host key 确认:

ssh -p 2222 root@10.89.62.2 -R 80:intranet-web:80 -N

实测回显(首连指纹提示,[10.89.62.2]:2222 即 sish 服务端地址):

The authenticity of host '[10.89.62.2]:2222 ([10.89.62.2]:2222)' can't be established.
ED25519 key fingerprint is: SHA256:toUje0hOAi6JAcQFWj4Z+JbdVVVjTWs+uDZprkMq1mk
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[10.89.62.2]:2222' (ED25519) to the list of known hosts.
root@10.89.62.2's password:

输入密码 q1w2e3r4(4.4 单元中配置的 --authentication-password)后连接保持(-N 表示不开 shell,隧道挂在前台)。此时在 sish-server 侧观察服务日志,可见 HTTP 转发已建立:

journalctl -u sish --no-pager -n 2

实测回显:

2026/10/26 - 05:35:45 | Accepted SSH connection for: 10.89.62.4:55326
2026/10/26 - 05:35:47 | HTTP forwarding started: http://lz8.sish.local -> /tmp/10.89.62.4_55326_803552062333 for client: 10.89.62.4:55326

sish 为本次隧道分配了随机子域名 lz8.sish.local(默认 3 位随机字符,可用参数固定,见 FAQ)。在能解析该域名的客户端上验证 HTTP 反向代理闭环——本实测环境无内网 DNS,用 curl 的 --resolve 等价模拟「泛域名已生效」的访问(10.89.62.2 为 sish 服务器,生产中此处就是你的公网域名):

curl -s -H "Host: lz8.sish.local" http://10.89.62.2/ | head -3
curl -sI -H "Host: lz8.sish.local" http://10.89.62.2/ | head -2

实测回显(内网 nginx 页面经隧道透出,HTTP 200):

<!DOCTYPE html>
<html>
<head>
HTTP/1.1 200 OK
Accept-Ranges: bytes

同时 sish 服务端对每次 HTTP 请求都有访问日志(含子域名、状态码、耗时、来源 IP、方法、路径):

2026/10/26 - 05:36:03 | lz8.sish.local | 200 |    1.785524ms |      10.89.62.4 | GET     /

至此闭环验证完成:内网应用 → client-host 隧道 → sish 服务端 → 外部访问者,全链路打通。

4.8 升级、降级与多版本管理

sish 无内置升级命令,升级即「下载新版发布件 → 替换二进制 → 重启服务」。推荐用「版本目录 + 软链接」管理多版本,回滚只需把软链接指回旧目录:

mkdir -p /opt/sish-3.0.5 && mv /opt/sish/* /opt/sish-3.0.5/
# 新版本发布后:
# tar xzf sish-3.1.0.linux-amd64.tar.gz && mv sish-3.1.0.linux-amd64 /opt/sish-3.1.0
ln -sfn /opt/sish-3.0.5 /opt/sish
chown -R sish:sish /opt/sish-3.0.5
systemctl restart sish && systemctl is-active sish

实测回显:

active

升级后用 sish --version 核对版本、用 journalctl -u sish 确认 host key 仍是 Loading ssh_key(同一份密钥,客户端 known_hosts 无需变更)。降级同理:把软链接重新指向旧版本目录并重启即可。

五、离线安装方案(B:断网服务器)

生产内网环境常无法直连 GitHub。方案 B 在「有网的跳板机」上完成下载与校验,再把发布件拷贝到断网的 sish 服务器安装,安装动作与方案 A 完全一致。

5.1 跳板机下载与校验

在能上网的跳板机上执行(下载慢走代理,⚠️ 同 4.1 网络说明):

curl -fL -o sish-3.0.5.linux-amd64.tar.gz https://github.com/antoniomika/sish/releases/download/v3.0.5/sish-3.0.5.linux-amd64.tar.gz
curl -fL -o sish-3.0.5-checksums.txt https://github.com/antoniomika/sish/releases/download/v3.0.5/sish-3.0.5-checksums.txt
grep linux-amd64 sish-3.0.5-checksums.txt
sha256sum sish-3.0.5.linux-amd64.tar.gz

实测回显(哈希一致后才能进内网):

81fe1ed90447d54e1c6973e4a12a3842845d48ec6d970c2ff628f6f89e5398bf  sish-3.0.5.linux-amd64.tar.gz
81fe1ed90447d54e1c6973e4a12a3842845d48ec6d970c2ff628f6f89e5398bf  sish-3.0.5.linux-amd64.tar.gz

5.2 传入内网并安装

用 scp 把发布件拷到断网 sish 服务器的 /opt 下(在内网经堡垒机/USB 均可,本实测用 scp):

scp sish-3.0.5.linux-amd64.tar.gz root@10.89.62.2:/opt/

实测回显:

sish-3.0.5.linux-amd64.tar.gz            100%   12MB   8.2MB/s   00:01

在断网的 sish-server 上完成与方案 A 相同的安装动作(校验 → 解压 → 账户 → systemd → 防火墙,逐条命令见 4.2-4.6 节,此处不重复):

cd /opt && sha256sum sish-3.0.5.linux-amd64.tar.gz
tar xzf sish-3.0.5.linux-amd64.tar.gz
mv sish-3.0.5.linux-amd64 /opt/sish

5.3 离线环境的功能影响说明

断网只影响「下载」,不影响 sish 运行:客户端 ssh 建隧道、HTTP/TCP 转发、密码/公钥认证均不依赖外网。两个例外需注意:

  • --https-ondemand-certificate(Let's Encrypt 按需签发)要求 sish 服务器能访问 Let's Encrypt 且可被回访验证,断网环境不可用,改用 --https-certificate-directory 预置证书目录;
  • 外部认证(--authentication-key-request-url)指向的内网认证服务可达即可。

六、方案对比与选择建议

维度方案 A:在线二进制方案 B:离线二进制
是否需外网安装时需(GitHub Releases)安装时不需要(跳板机代下)
安装方式curl 下载 + tar 解压 + systemdscp 传入 + tar 解压 + systemd
服务单元来源自写 systemd 单元自写 systemd 单元
监听端口2222 / 80 / 30000-30010同左
升级便利性高(重新下载替换)中(每版本需人工传入)
适用场景有公网且可访问 GitHub内网隔离、安全合规要求环境

选择建议:能出网选 A(步骤最少、升级最快);等保/隔离环境选 B(发布件哈希校验后入库走变更流程)。两种方案的 systemd 单元与运行配置完全一致,后续配置管理通用。

七、配置说明

7.1 配置的三种途径

sish v3 的配置有三条等价通道,任选其一或组合使用:

  1. 命令行参数:systemd 单元 ExecStart 中的 --xxx=yyy,优先级最高(实测:当 config.yml 写 domain: cfgtest.local 而命令行传 --domain=sish.local 时,隧道实际分配 xxx.sish.local,命令行覆盖生效);
  2. 环境变量:参数名转大写、连字符换下划线、加 SISH_ 前缀,如 SISH_DOMAIN、SISH_AUTHENTICATION_PASSWORD(systemd 单元中用 Environment= 注入);
  3. config.yml 配置文件:默认在工作目录下查找 config.yml(实测:WorkingDirectory=/opt/sish 时启动日志输出 Using config file: config.yml 自动加载),键名与参数名一致(连字符形式,如 domain: sish.example.com)。

config.yml 最小示例(与 4.4 单元等价的配置):

domain: sish.example.com
ssh-address: 0.0.0.0:2222
http-address: 0.0.0.0:80
authentication: true
authentication-password: q1w2e3r4
port-bind-range: 30000-30010
bind-random-ports: false

💡 技术拓展:配置管理工具有多种流派——命令行参数(直观、适合 systemd ExecStart)、环境变量(适合编排系统注入与密钥分离)、配置文件(适合参数多、需版本管理的场景)。sish 三通道同时支持且键名一致,迁移成本低。本指南实际采用「命令行参数为主」:参数全部显式写在 systemd 单元里,systemctl cat sish 一眼可见全部配置,排障时无需翻文件。

7.2 目录与文件清单

安装完成后 sish 的关键文件布局(均在 /opt/sish 下):

路径用途生成时机
/opt/sish/sish服务端二进制安装(4.2)
/opt/sish/deploy/keys/ssh_keySSH host key(私钥),客户端指纹校验的根首次启动自动生成(4.5 实测)
/opt/sish/deploy/keys/ssh_key.pubhost key 公钥同上
/opt/sish/deploy/pubkeys/客户端认证公钥目录(文件监听、动态加载)部署时创建,按需放公钥
/opt/sish/deploy/ssl/HTTPS 证书目录(name.crt/name.key 成对)启用 HTTPS 时放置
/tmp/sish.log默认日志文件(--log-to-file 开启时)运行期

7.3 认证配置

v3 起认证默认开启(--authentication 默认 true)。三种可用形态:

  • 密码认证:--authentication-password=q1w2e3r4,客户端输密码或用 sshpass 脚本化;
  • 公钥认证:把客户端公钥文件放入 --authentication-keys-directory(默认 deploy/pubkeys/),sish 监听目录变更自动加载(默认轮询间隔 200ms),无需重启;
  • 外部认证:--authentication-key-request-url / --authentication-password-request-url 把公钥/密码校验交给远端 HTTP 服务(POST JSON,200 即放行),适合对接统一账号体系。

公钥认证部署(client-host 上生成密钥对并把公钥装入 sish):

ssh-keygen -t ed25519 -N "" -f /root/.ssh/id_ed25519 -C tunnel@client
scp /root/.ssh/id_ed25519.pub root@10.89.62.2:/opt/sish/deploy/pubkeys/tunneluser.pub

实测回显:

Generating public/private ed25519 key pair.
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
id_ed25519.pub                            100%   102    1.1MB/s   00:00

之后客户端即可免密建隧道(实测使用公钥认证登录时,sish 服务端日志记录 Login attempt: 10.89.62.4:59942, user root key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE1AAAAIOYISqzfKDHXOTjrS4i7j1bfYJhMRIUkvz9/IfyOzXMb)。更多参数级验证见《sish 3.0.5 配置参数详解》,客户端命令矩阵见《sish 3.0.5 常用 CLI 命令详解》。

八、常见问题(FAQ)

Q1:curl 下载发布件报错退出码 35 怎么办? 官方源直连失败(SSL 连接被重置)时走代理:curl -fL -x http://192.168.1.62:7897 -o <文件名> <URL>。本实测即官方源不可用、代理下载成功;内网环境直接用方案 B 由跳板机代下。当前实测可用渠道:GitHub Releases + 代理 192.168.1.62:7897。

Q2:首次启动日志出现 Error loading private key, generating a new one 是故障吗? 不是。这是 sish 首次启动没有 host key 时的正常初始化流程,紧随其后输出 Generated ED25519 Keypair,密钥已写入 deploy/keys/ssh_key。之后重启日志变为 Loading ssh_key as ssh-ed25519 host key(实测回显见 4.5),指纹保持 SHA256:toUje0hOAi6JAcQFWj4Z+JbdVVVjTWs+uDZprkMq1mk 不变。前提是 WorkingDirectory 固定且 deploy/keys 可写——若每次重启都重新生成,检查 systemd 单元的 WorkingDirectory 与 sish 账户写权限。

Q3:客户端连接被拒 Permission denied (password,publickey)? v3 起认证默认开启,未配置密码与公钥时任何客户端都会被拒。解决:服务端配置 --authentication-password(或放公钥到 pubkeys 目录)后重试。实测错误密码与正确密码的表现:

root@10.89.62.2: Permission denied (password,publickey).   # 错误口令
Press Ctrl-C to close the session.                          # 正确口令,进入隧道挂起态

若想完全匿名(仅限内网试验环境),用 --authentication=false 启动。

Q4:隧道命令里指定的端口/子域名没有生效,被换成了随机的? v3 默认 --bind-random-ports=true、--bind-random-subdomains=true:TCP 隧道请求的端口与 HTTP 隧道请求的子域名都只是"意愿",冲突或默认策略下会被随机分配替代(实测:请求 30005 端口被分配 30003;请求 myweb 子域名被分配 omk)。要尊重请求值:加 --bind-random-ports=false --force-requested-ports(端口)与 --bind-random-subdomains=false --force-requested-subdomains(子域名);强制模式下重复绑定会明确失败,客户端回显 Warning: remote port forwarding failed for listen port 30005,服务端日志 Error setting up HTTPListener: error assigning requested subdomain to tunnel。

Q5:80 端口启动失败或 port is already allocated? 端口被其他进程占用。定位占用者并决策换端口或停掉冲突服务:

ss -ltnp | grep ':80 '

实测回显形态(示例):

LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=812,fd=6))

Q6:ssh 隧道频繁断开? SSH 连接断开隧道即断。客户端加保活参数(实测组合):

ssh -p 2222 root@10.89.62.2 -R 80:intranet-web:80 -N \
  -o ServerAliveInterval=10 -o ServerAliveCountMax=3 -o ExitOnForwardFailure=yes

长期隧道建议用 autossh 托管(autossh -M 0 -o "ServerAliveInterval 10" ...),或写入客户端 ~/.ssh/config 持久化(详见《sish 3.0.5 常用 CLI 命令详解》)。

Q7:TCP 隧道分配的端口外部访问不通? 三步排查:服务端日志确认实际分配端口(TCP forwarding started: sish.local:30009);确认端口在 --port-bind-range 范围内且防火墙/安全组放行(4.6);确认客户端 -R 目标服务在本机可访问(curl 127.0.0.1:<内网端口>)。

九、卸载与清理

systemctl disable --now sish
rm -f /etc/systemd/system/sish.service
systemctl daemon-reload
rm -rf /opt/sish /opt/sish-3.0.5 /opt/sish-download
userdel sish
ufw delete allow 2222/tcp
ufw delete allow 80/tcp
ufw delete allow 30000:30010/tcp

实测回显(disable 同时停止服务并移除自启链接):

Removed "/etc/systemd/system/multi-user.target.wants/sish.service".

最后确认无残留进程与监听:

pgrep -a sish; ss -ltn | grep -E ':(2222|80)\b'

实测回显(无输出即清理干净):

(无输出)

十、参考链接