diff --git a/ssr.sh b/ssr.sh new file mode 100644 index 0000000..a2a0c50 --- /dev/null +++ b/ssr.sh @@ -0,0 +1,170 @@ +#!/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 "============================================" \ No newline at end of file