添加 ssr.sh
This commit is contained in:
parent
6639f04f2a
commit
c559878dce
170
ssr.sh
Normal file
170
ssr.sh
Normal 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 "============================================"
|
||||
Loading…
x
Reference in New Issue
Block a user