
前几天想整个 Aria2,发现大部分镜像是需要暴漏 Aria2 RPC,或者是包含额外的文件浏览功能,又或者自带的 AriaNg 不能自动连接 Aria2 的。于是就研究了一下,自己整了一个。欢迎大家提出意见。
这个镜像有以下特点:
EXTERNAL_PORT。Docker Hub https://hub.docker.com/r/sanjusss/aria2-ariang-docker
Github https://github.com/sanjusss/aria2-ariang-docker
docker run -d --name aria2 -p 80:80 -v ./data:/data sanjusss/aria2-ariang-docker 访问服务器 IP 即可进入 AriaNg 界面,默认用户密码均为 admin。
docker run -d --name aria2 \ -p 5003:80 \ -v /home/data:/data \ -v /home/aria2:/conf \ -e PUID=1000 \ -e PGID=1000 \ -e EXTERNAL_PORT=5003 \ -e USER_NAME=user \ -e PASSWORD=123456 \ sanjusss/aria2-ariang-docker docker-compose.yml 文件
version: '3' services: aria2: image: sanjusss/aria2-ariang-docker container_name: aria2 environment: PUID: 1000 PGID: 1000 EXTERNAL_PORT: 5003 USER_NAME: user PASSWORD: 123456 volumes: - /home/aria2:/conf - /home/data:/data ports: - 5003:80 可以直接参考 Github 上,这边表格发出来就乱了。
1 pljhonglu 2019 年 12 月 26 日 nbsp; 关注一下。Aria2 RPC 协议改成 ws 照样可以被外部访问,而且还是无密码的 |
3 Buges 2019 年 12 月 26 日 via Android 为啥非要整到一个镜像里,按照 docker 最佳实践,一个镜像跑 aria2 一个跑 web 双方在一个网络里通信不好吗? 可以按需配置,暴露端口,远程调用等等。 |
5 zyxfsky 2019 年 12 月 26 日 我也觉得应该分两个容器,compose 整合到一起就行,一个容器里起了 aria2 和 nginx 进程,然后又自己搞个健康检查,为啥不分开呢 |
6 binux 2019 年 12 月 26 日 Aria2 RPC 不是还是被 nginx 暴露了,你这是掩耳盗铃? |
8 Buges 2019 年 12 月 26 日 @sanjusss #4 你说的这个需求不应该打包一个镜像,只需要用独立的镜像配置好一个 docker-compose.yaml 文件就能满足并方便同样需求的人。 |
9 binux 2019 年 12 月 26 日 @sanjusss #7 https://binux.github.io/yaaw/demo/#path=ws://admin:admin@localhost/jsonrpc curl -d '{"jsonrpc":"2.0","method":"aria2.getGlobalOption","id":1,"params":[]}' http://admin:admin@localhost/jsonrpc 你压根就不懂 HTTP 协议。 |
11 sanjusss OP |
12 binux 2019 年 12 月 26 日 @sanjusss #11 我都写了 curl 命令你都看不懂? 这根本不是用不用 websocket 的问题,HTTP 在这里不行是因为你错误给 OPTIONS 请求配置了 basic authentication,导致“纯前端” 用 HTTP POST 访问受限。 如果不是 “纯前端”,直接请求 RPC 接口,一点问题都没有。这不就是掩耳盗铃吗? 另外一种 “纯前端” 能访问的方法是 HTTP GET (JSONP),但是现在没有人写 aria2 纯前端客户端的时候用 Aria2 RPC 的 GET 方法了(存在安全性问题),所以没办法展示给你看。 |
13 binux 2019 年 12 月 26 日 @sanjusss #11 来来来,为了让你死得更难看一点,我给你找了一个用 HTTP GET 方式的客户端 https://rawcdn.githack.com/ziahamza/webui-aria2/c11c931f47c98daa97531712ba0064ef100565c6/index.html 设置地址 http://localhost/json 用户名 admin 密码 admin 就可以访问了。 |
14 sanjusss OP @binux #12 我使用 get 方法调用 rpc, curl http://192.168.1.3/jsonrpc?jsOnrpc=2.0&method=aria2.getGlobalStat&id=QXJpYU5nXzE1NzczMzY3NjFfMC4wNDIyMzI4NzU3MTk3NzExOQ== <html> <head><title>401 Authorization Required</title></head> <body> <center><h1>401 Authorization Required</h1></center> <hr><center>nginx</center> </body> </html> 请指教在不使用用户名密码情况下调用方法。 |
16 binux 2019 年 12 月 26 日 @sanjusss #15 「大部分镜像是需要暴漏 Aria2 RPC 」? 你也要暴露。 「 Aria2 RPC 不能被外部调用」? 我已经给你证实可以被外部访问了。 「确保了 Aria2 RPC 的安全性」? 你这和 aria2 自带的 --rpc-user 有什么区别,而且 rpc-user 已经是不推荐的认证方式了。 |
17 7654 2019 年 12 月 26 日 { "language": "zh_Hans", "title": "${downspeed}, ${upspeed} - ${title}", "titleRefreshInterval": 5000, "browserNotification": true, "rpcAlias": "", "rpcHost": "xxxxx.com", "rpcPort": 8080, "rpcInterface": "jsonrpc", "protocol": "wss", "httpMethod": "POST", "secret": "XXXXXXXXXXXX==" } 这是我自己的 AriaNG aria2 使用 LE 证书,wss+secret |
18 sanjusss OP @binux #16 现在你再用最新的镜像试试吧。 我加了个最简单的认证,直接阻止了未过访问首页的调用。当然这个基于 cookie 的验证太简单了,后面我再改就行了。 https://i.loli.net/2019/12/26/2fCAcJzEXLP1yN8.jpg |
19 binux 2019 年 12 月 26 日 @sanjusss #18 然而 cookie 并不能 CSRF,你作为用户访问过一次主页后,cookie 和 basic auth 已经存在浏览器中了,我用恶意脚本向你 aria2 RPC GET 请求是畅通无阻的。 我建议你别继续下去了,缺少知识情况下,你包括这条路就是错。“对 AriaNg 进行密码验证” 压根就没有意义。 |
20 sanjusss OP @binux #19 搞了半天,原来你是“对 AriaNg 进行密码验证”有意见啊!我的重点又不是加密,而是访问 AriaNg 时无需手动更改设置。 登录即可用,这才是我要搞的。 对于你的其他观点,不能苟同。 |
21 binux 2019 年 12 月 26 日 via Android @sanjusss #20 问题是你是在以降低 aria2 安全性的方式做的。 保存一个带 RPC 地址的书签就这么难吗?实在不行你把默认地址硬编码到 AriaNg 也比你画蛇添足反代 aria2 好啊。 |
22 pljhonglu 2019 年 12 月 26 日 |
26 Maskeney 2019 年 12 月 26 日 恭喜你重复造了一个没什么卵用的轮子 |
27 deorth 2019 年 12 月 26 日 好奇你怎么实现自动填写 rpc-sercet 的。 |
28 justin2018 2019 年 12 月 27 日 可以完美配合 115 下载助手么 |
issue:内网穿透后 RPC 连不上 |
30 Lazaru5 2020 年 1 月 1 日 需求:aria-ng rpc 端口可自定义 |