基于Docker,以SSH连接为接入方式的多用户认证Clash Proxy接入方案
- 使用Linux账户作为用户的凭据,root可以通过管理linux用户实现对账户的管控。将SSHD功能整合到容器中,用户可以直接通过登录SSH并设置动态流量转发的方式连接上代理。
- 通过pam,对ssh登入登出写入到日志文件。也让clash程序的日志保存到文件
- 安装了ssh的任何环境下,使用一条SSH命令即可接入代理,使用Tun模式缩短命令复杂度~~(对安全的取舍)~~。而且登入ssh后会提示正确的SSH命令格式,尽可能提示用户正确的接入命令
- Clash程序和SSH均处于Docker环境下,且为所有接入的用户分配的Shell均为
/bin/tee(理论无法执行命令)
- clone本项目并进入项目文件夹
git clone [https://github.com/Jurangren/Clash-SSH.git](https://github.com/Jurangren/Clash-SSH.git) && cd Clash-SSH - 将你的clash订阅文件
config.yaml下载到clash-ssh/config/下,并且需要添加下图所示红框里的内容
- 如果需要修改开放端口(默认
1111,9091),请修改docker-compose.yaml中的ports部分
- 启动/关停/查看日志
- 首次启动:
sudo docker-compose up -d,等待Dockerfile构建完毕需要等待一段时间
- 之后每次启动:
sudo docker-compose start - 关停:
sudo docker-compose stop - 日志查看:
tail -f config/main.log或docker logs -f clash-ssh-clash-1
docker exec -it clash-ssh-clash-1 bash进入容器bash- 用户添加:
/adduser.sh <用户名> <密码>,相当于执行useradd -m -p $(openssl passwd -1 $password) -s /bin/tee $username,登录进来的用户shell为/bin/tee
注意:默认启动容器后没有任何可登录账户,需要手动添加账户
- 用户删除:
userdel <用户名>
浏览器访问http://ip:9091/ui(未修改暴露端口情况下)

- 用户通过连接部署的clash-ssh暴露在外部的ssh端口,并使用
-D设置一个本地动态转发端口:ssh -D <Lport> <user>@<ip> -p1111
- 用户使用
socks5://127.0.0.1:<Lport>即可接通代理
- windows端浏览器可使用
SwitchyOmega代理插件,linux端使用proxychains
开启Tun模式需要给容器添加NET_ADMIN特权,虽然添加用户的时候已经将登录shell设置为/bin/tee,但如果很介意该特权也可以关闭Tun模式
- 修改你的clash
config.yaml配置文件,去除掉Tun部分的内容 - 将
docker-compose.yaml中cap_add: NET_ADMIN两行删去 - 重新构建部署,以后用户连接时使用
ssh -L <Lport>:127.0.0.1:<SocksPort> <user>@<ip> -p1111
Q:配置文件修改了启动后clash程序还是报错
A:这里使用的clash-linux-amd64可能不适用你的linux内核,或者默认的clash程序不适配你提供的配置文件格式。你可以到自己的机场平台获取适配的clash程序后重命名为clash-linux-amd64,然后重新构建镜像








