添加 ssr.sh

This commit is contained in:
chunzhi 2026-05-22 09:05:06 -04:00
parent 6639f04f2a
commit c559878dce

170
ssr.sh Normal file
View File

@ -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" <<EOF
{
"server": "0.0.0.0",
"server_port": $PORT,
"password": "$PASSWORD",
"method": "$METHOD",
"timeout": 300,
"mode": "tcp_and_udp",
"fast_open": true,
"no_delay": true
}
EOF
info "配置文件: $CONFIG_FILE"
# 创建 systemd 服务
info "创建 systemd 服务..."
cat > /etc/systemd/system/ss-rust.service <<EOF
[Unit]
Description=Shadowsocks-Rust Server
After=network.target
[Service]
Type=simple
ExecStart=${BIN_DIR}/ssserver -c ${CONFIG_FILE}
Restart=on-failure
RestartSec=3
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable ss-rust
systemctl start ss-rust
# 等待启动
sleep 2
if systemctl is-active --quiet ss-rust; then
info "服务启动成功!"
else
error "服务启动失败,请查看: journalctl -u ss-rust -f"
fi
# 防火墙
if command -v ufw &>/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 "============================================"