From e44d172e248ded662ad8ff38b293a302299cb88a Mon Sep 17 00:00:00 2001 From: mango Date: Sat, 14 Feb 2026 20:58:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BA=A4=E4=BA=92=E8=8F=9C=E5=8D=95=20?= =?UTF-8?q?+=20=E6=9F=A5=E7=9C=8B/=E4=BF=AE=E6=94=B9=E7=AB=AF=E5=8F=A3/?= =?UTF-8?q?=E9=87=8D=E7=BD=AE=E5=AF=86=E9=92=A5/=E5=90=AF=E5=81=9C?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ss-rust.sh | 187 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 178 insertions(+), 9 deletions(-) diff --git a/ss-rust.sh b/ss-rust.sh index 3a40db9..54e475e 100644 --- a/ss-rust.sh +++ b/ss-rust.sh @@ -302,15 +302,135 @@ uninstall() { exit 0 } -# ============ 主流程 ============ -main() { - case "${1:-}" in - uninstall|remove) - check_root - uninstall - ;; - *) - check_root +# ============ 查看配置 ============ +show_config() { + if [[ ! -f /etc/shadowsocks-rust/config.json ]]; then + error "未安装 shadowsocks-rust" + fi + echo "" + echo -e "${CYAN}════════════════════════════════════════${NC}" + echo -e "${CYAN} 📋 当前配置${NC}" + echo -e "${CYAN}════════════════════════════════════════${NC}" + echo "" + cat /etc/shadowsocks-rust/config.json + echo "" + echo -e "${CYAN}────────────────────────────────────────${NC}" + echo -e "${GREEN}服务状态:${NC}" + systemctl status ss-rust --no-pager 2>/dev/null | head -5 + echo "" + if [[ -f /etc/shadowsocks-rust/subscribe/info.txt ]]; then + cat /etc/shadowsocks-rust/subscribe/info.txt + fi +} + +# ============ 修改端口 ============ +change_port() { + if [[ ! -f /etc/shadowsocks-rust/config.json ]]; then + error "未安装 shadowsocks-rust" + fi + echo "" + echo -e "${GREEN}当前配置:${NC}" + python3 -c " +import json +with open('/etc/shadowsocks-rust/config.json') as f: + c = json.load(f) +for i,s in enumerate(c['servers']): + print(f\" 节点{i+1}: {s['method']} | 端口 {s['server_port']}\") +" 2>/dev/null || cat /etc/shadowsocks-rust/config.json + echo "" + read -p "输入节点编号 (1/2): " node_num + read -p "输入新端口: " new_port + + python3 -c " +import json,sys +with open('/etc/shadowsocks-rust/config.json') as f: + c = json.load(f) +idx = int('${node_num}') - 1 +if 0 <= idx < len(c['servers']): + c['servers'][idx]['server_port'] = int('${new_port}') + with open('/etc/shadowsocks-rust/config.json','w') as f: + json.dump(c, f, indent=4) + print('端口已修改') +else: + print('无效节点编号') + sys.exit(1) +" 2>/dev/null + + systemctl restart ss-rust + info "服务已重启,新端口: ${new_port}" + # 重新生成订阅 + SERVER_IP=$(get_ip) + source_config + gen_subscribe + info "订阅配置已更新" +} + +# ============ 读取现有配置 ============ +source_config() { + if [[ -f /etc/shadowsocks-rust/config.json ]]; then + eval $(python3 -c " +import json +with open('/etc/shadowsocks-rust/config.json') as f: + c = json.load(f) +s = c['servers'] +print(f'PORT_2022={s[0][\"server_port\"]}') +print(f'KEY_2022={s[0][\"password\"]}') +print(f'METHOD_2022={s[0][\"method\"]}') +print(f'PORT_RAW={s[1][\"server_port\"]}') +print(f'KEY_RAW={s[1][\"password\"]}') +print(f'METHOD_RAW={s[1][\"method\"]}') +" 2>/dev/null) + fi +} + +# ============ 重置密钥 ============ +reset_keys() { + if [[ ! -f /etc/shadowsocks-rust/config.json ]]; then + error "未安装 shadowsocks-rust" + fi + SERVER_IP=$(get_ip) + KEY_2022=$(gen_key_128) + KEY_RAW=$(openssl rand -base64 16) + + python3 -c " +import json +with open('/etc/shadowsocks-rust/config.json') as f: + c = json.load(f) +c['servers'][0]['password'] = '${KEY_2022}' +c['servers'][1]['password'] = '${KEY_RAW}' +with open('/etc/shadowsocks-rust/config.json','w') as f: + json.dump(c, f, indent=4) +" 2>/dev/null + + systemctl restart ss-rust + source_config + gen_subscribe + info "密钥已重置,服务已重启" + show_result +} + +# ============ 交互菜单 ============ +show_menu() { + echo "" + echo -e "${CYAN}════════════════════════════════════════${NC}" + echo -e "${CYAN} 🚀 SS-Rust 管理面板${NC}" + echo -e "${CYAN}════════════════════════════════════════${NC}" + echo "" + echo -e " ${GREEN}1.${NC} 安装 SS-Rust" + echo -e " ${GREEN}2.${NC} 查看配置" + echo -e " ${GREEN}3.${NC} 修改端口" + echo -e " ${GREEN}4.${NC} 重置密钥" + echo -e " ${GREEN}5.${NC} 启动服务" + echo -e " ${GREEN}6.${NC} 停止服务" + echo -e " ${GREEN}7.${NC} 重启服务" + echo -e " ${GREEN}8.${NC} 查看日志" + echo -e " ${RED}9.${NC} 卸载" + echo -e " ${YELLOW}0.${NC} 退出" + echo "" + read -p "请选择 [0-9]: " choice + + case "$choice" in + 1) check_os sync_time install_ssrust @@ -319,6 +439,55 @@ main() { gen_subscribe show_result ;; + 2) show_config ;; + 3) change_port ;; + 4) reset_keys ;; + 5) systemctl start ss-rust && info "服务已启动" ;; + 6) systemctl stop ss-rust && info "服务已停止" ;; + 7) systemctl restart ss-rust && info "服务已重启" ;; + 8) journalctl -u ss-rust --no-pager -n 30 ;; + 9) uninstall ;; + 0) exit 0 ;; + *) warn "无效选择" ;; + esac +} + +# ============ 主流程 ============ +main() { + check_root + case "${1:-}" in + install) + check_os; sync_time; install_ssrust; gen_config; setup_service; gen_subscribe; show_result + ;; + uninstall|remove) + uninstall + ;; + show|config|info) + show_config + ;; + restart) + systemctl restart ss-rust && info "服务已重启" + ;; + start) + systemctl start ss-rust && info "服务已启动" + ;; + stop) + systemctl stop ss-rust && info "服务已停止" + ;; + log|logs) + journalctl -u ss-rust --no-pager -n 30 + ;; + reset) + reset_keys + ;; + *) + # 无参数时:已安装显示菜单,未安装直接安装 + if [[ -f /etc/shadowsocks-rust/config.json ]]; then + show_menu + else + check_os; sync_time; install_ssrust; gen_config; setup_service; gen_subscribe; show_result + fi + ;; esac }