#!/bin/bash # ============================================ # Shadowsocks-Rust 一键安装脚本 # 加密方式: 2022-blake3-aes-256-gcm # ============================================ set -e # ---------- 配置区 ---------- PASSWORD="HXSWPPq55YuuPz8IzfHseUoFaBOU2JbeOKR1g5QoolE=" METHOD="2022-blake3-aes-256-gcm" PORT=12346 CONFIG_DIR="/etc/shadowsocks-rust" CONFIG_FILE="${CONFIG_DIR}/config.json" BIN_DIR="/usr/local/bin" # ---------------------------- RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' info() { echo -e "${GREEN}[INFO]${NC} $1"; } warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; } # 检查 root [[ $EUID -ne 0 ]] && error "请使用 root 用户运行此脚本: sudo bash $0" # 检测架构 ARCH=$(uname -m) case "$ARCH" in x86_64) TARGET="x86_64-unknown-linux-gnu" ;; aarch64) TARGET="aarch64-unknown-linux-gnu" ;; armv7l) TARGET="armv7-unknown-linux-gnueabihf" ;; *) error "不支持的架构: $ARCH" ;; esac info "检测到架构: $ARCH -> $TARGET" # 安装依赖 info "安装依赖..." if command -v apt &>/dev/null; then apt update -qq && apt install -y -qq wget tar xz-utils elif command -v yum &>/dev/null; then yum install -y -q wget tar xz elif command -v dnf &>/dev/null; then dnf install -y -q wget tar xz else warn "未知包管理器,请确保已安装 wget tar xz" fi # 获取最新版本 info "获取最新版本号..." LATEST=$(wget -qO- "https://api.github.com/repos/shadowsocks/shadowsocks-rust/releases/latest" | grep '"tag_name"' | head -1 | sed -E 's/.*"([^"]+)".*/\1/') if [[ -z "$LATEST" ]]; then warn "无法获取最新版本,使用默认 v1.21.2" LATEST="v1.21.2" fi info "最新版本: $LATEST" # 下载 FILENAME="shadowsocks-${LATEST}.${TARGET}.tar.xz" URL="https://github.com/shadowsocks/shadowsocks-rust/releases/download/${LATEST}/${FILENAME}" TMP_DIR=$(mktemp -d) info "下载 $FILENAME ..." wget -q --show-progress -O "${TMP_DIR}/${FILENAME}" "$URL" || error "下载失败: $URL" # 解压安装 info "解压并安装..." tar -xf "${TMP_DIR}/${FILENAME}" -C "${TMP_DIR}" for bin in ssserver sslocal ssmanager ssservice ssurl; do if [[ -f "${TMP_DIR}/${bin}" ]]; then cp "${TMP_DIR}/${bin}" "${BIN_DIR}/" chmod +x "${BIN_DIR}/${bin}" fi done rm -rf "$TMP_DIR" ssserver --version && info "安装成功!" || error "安装失败" # 生成配置 info "生成配置文件..." mkdir -p "$CONFIG_DIR" cat > "$CONFIG_FILE" < /etc/systemd/system/ss-rust.service </dev/null; then ufw allow ${PORT}/tcp &>/dev/null ufw allow ${PORT}/udp &>/dev/null info "UFW 已放行端口 $PORT" elif command -v firewall-cmd &>/dev/null; then firewall-cmd --permanent --add-port=${PORT}/tcp &>/dev/null firewall-cmd --permanent --add-port=${PORT}/udp &>/dev/null firewall-cmd --reload &>/dev/null info "firewalld 已放行端口 $PORT" fi # 获取服务器 IP SERVER_IP=$(wget -qO- ifconfig.me 2>/dev/null || wget -qO- ip.sb 2>/dev/null || echo "YOUR_SERVER_IP") # 输出信息 echo "" echo "============================================" echo -e "${GREEN} Shadowsocks-Rust 安装完成!${NC}" echo "============================================" echo "" echo " 服务器地址: $SERVER_IP" echo " 端口: $PORT" echo " 密码: $PASSWORD" echo " 加密方式: $METHOD" echo " UDP: 开启" echo "" echo "--------------------------------------------" echo " Clash 节点配置 (复制到 proxies 下):" echo "--------------------------------------------" echo "" echo " - {name: SS-${SERVER_IP}, type: ss, server: ${SERVER_IP}, port: ${PORT}, cipher: \"${METHOD}\", password: \"${PASSWORD}\", udp: true}" echo "" echo "--------------------------------------------" echo " 管理命令:" echo "--------------------------------------------" echo " 状态: systemctl status ss-rust" echo " 重启: systemctl restart ss-rust" echo " 停止: systemctl stop ss-rust" echo " 日志: journalctl -u ss-rust -f" echo "============================================"