Inspire 旅行是增长智慧的最佳方式!

AI生成Surge snell ,值得思考

📃

从零开始创建一个功能完善的 Surge Snell 服务器一键安装脚本。这个过程将深入理解脚本的每一个细节,并最终获得一个你可以自定义和维护的脚本。
这个脚本将实现以下目标:

  • 自动化: 无需手动输入命令,运行一个文件即可完成所有操作。
  • 智能化: 自动检测服务器的 CPU 架构,下载正确的 Snell 版本。
  • 安全性: 自动生成随机的端口和预共享密钥 (PSK)。
  • 稳定性: 创建 systemd 服务,确保 Snell 能开机自启并由系统管理。
  • 用户友好: 提供清晰的安装指示和最终的配置信息。

准备工作
在开始编写脚本之前,需要:

  • 一台位于境外的 Linux 服务器 (推荐 Debian, Ubuntu 或 CentOS)。
  • 使用 SSH 客户端(如 Terminal, PowerShell, PuTTY)登录到你的服务器。
  • 一个文本编辑器来编写脚本。你可以直接在服务器上使用 vim 或 nano,也可以在本地电脑上写好再上传。

脚本创建步骤
我们将把整个过程分解为几个核心的编程步骤。
第一步:创建脚本文件和设置基础结构
首先,让我们创建一个脚本文件并写入一些基础内容。

  • 登录到你的服务器。
  • 创建一个名为 install_snell.sh 的文件:
    touch install_snell.sh
  • 使用你喜欢的编辑器打开它,例如 nano:
    nano install_snell.sh
  • 在脚本的开头,写入 "Shebang",它告诉系统这个文件应该由哪个解释器来执行。对于 shell 脚本,通常是 /bin/bash。同时,添加一些注释来说明脚本的用途。

    /bin/bash

=========================

System Required: Debian/Ubuntu/CentOS

Description: One-click script for Snell Server

Version: 1.0

Author: Your Name

=========================

设置颜色,让输出更好看

RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color

第二步:检查运行环境和权限
一个好的脚本应该在开始时就检查是否满足运行条件。

  • 检查Root权限: 大部分安装操作都需要 root 权限。我们可以通过检查用户 ID ($EUID) 是否为 0 来判断。
    在脚本中加入以下代码:

    # 检查是否为 root 用户

if [ "$EUID" -ne 0 ]; then
echo -e "${RED}错误:本脚本需要以 root 权限运行!${NC}"
exit 1
fi

  • 安装必要的工具: 脚本需要 curl 来下载文件,unzip 来解压文件。我们需要确保它们已经被安装。

    # 安装依赖

echo "正在检查并安装必要的工具 (curl, unzip)..."
if ! command -v curl &> /dev/null || ! command -v unzip &> /dev/null; then
apt-get update && apt-get install -y curl unzip || yum install -y curl unzip
fi
echo -e "${GREEN}工具检查完毕。${NC}"

  • command -v 用来检查命令是否存在。
  • apt-get 是 Debian/Ubuntu 的包管理器,yum 是 CentOS 的。|| 表示如果前者失败,则执行后者。
    第三步:检测系统架构并下载 Snell
    Snell 服务器针对不同的 CPU 架构有不同的二进制文件(例如 amd64, arm64)。脚本必须能自动识别并下载正确的版本。
  • 定义变量和检测架构:

    # 定义 Snell 版本和下载基础 URL

SNELL_VERSION="4.0.1" # 你可以随时更新到最新版本
BASE_URL="[https://dl.nssurge.com/snell/snell-server-v${SNELL_VERSION}](https://dl.nssurge.com/snell/snell-server-v$%7BSNELL_VERSION%7D)"

检测系统架构

ARCH=$(uname -m)
case ${ARCH} in
x86_64|amd64)
SNELL_ARCH="amd64"
;;
aarch64|arm64)
SNELL_ARCH="aarch64"
;;
*)
echo -e "${RED}错误:不支持的系统架构: ${ARCH}${NC}"
exit 1
;;
esac

echo "检测到系统架构为: ${GREEN}${SNELL_ARCH}${NC}"

  • 下载并解压文件:

    # 拼接下载链接并下载

DOWNLOAD_URL="${BASE_URL}-linux-${SNELL_ARCH}.zip"
echo "正在从 ${DOWNLOAD_URL} 下载 Snell Server..."

创建一个临时目录来处理文件

TEMP_DIR=$(mktemp -d)
curl -L -o "${TEMP_DIR}/snell.zip" "${DOWNLOAD_URL}"

解压文件

unzip -o "${TEMP_DIR}/snell.zip" -d /usr/local/bin/
chmod +x /usr/local/bin/snell-server

清理临时文件

rm -rf "${TEMP_DIR}"

echo -e "${GREEN}Snell Server 下载并安装成功!${NC}"

  • mktemp -d 创建一个安全的临时目录。
  • o 指定 curl 的输出文件。
  • unzip -o 表示覆盖现有文件,-d 指定解压目录。
  • chmod +x 赋予文件可执行权限。
    第四步:生成配置文件
    现在,我们需要为 Snell 创建一个配置文件,包含监听端口和密钥。
  • 生成随机参数:

    # 生成随机端口 (10000-65535)

PORT=$((RANDOM % 55536 + 10000))

生成随机 PSK (32位)

PSK=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w 32 | head -n 1)

  • 创建配置文件目录和文件:

    # 创建配置文件目录

mkdir -p /etc/snell

写入配置

cat > /etc/snell/snell-server.conf <<EOF
[snell-server]
listen = 0.0.0.0:${PORT}
psk = ${PSK}
ipv6 = true
EOF

echo -e "${GREEN}Snell 配置文件创建成功!(/etc/snell/snell-server.conf)${NC}"

  • cat > ... <<EOF 是一种 here-document 语法,可以方便地将多行文本写入文件。
    第五步:创建并启动 Systemd 服务
    为了让 Snell 能在后台稳定运行并开机自启,我们需要为它创建一个 systemd 服务。
  • 创建服务文件:

    # 创建 systemd 服务文件

cat > /etc/systemd/system/snell.service <<EOF
[Unit]
Description=Snell Proxy Service
After=network.target

[Service]
Type=simple
User=nobody
Group=nogroup
LimitNOFILE=32768
ExecStart=/usr/local/bin/snell-server -c /etc/snell/snell-server.conf

[Install]
WantedBy=multi-user.target
EOF

echo -e "${GREEN}Systemd 服务文件创建成功!${NC}"

  • User=nobody 和 Group=nogroup 是为了以低权限用户运行服务,增加安全性。
  • ExecStart 定义了启动服务的命令。
  • 启动服务:

    # 重新加载 systemd 配置并启动 snell 服务

systemctl daemon-reload
systemctl enable snell
systemctl start snell

echo -e "${GREEN}Snell 服务已启动并设置为开机自启!${NC}"

第六步:显示配置信息
最后,也是最重要的一步,向用户展示连接所需的所有信息。

  • 获取服务器 IP:

    # 获取服务器公网 IP

SERVER_IP=$(curl -s ip.sb)

  • 打印最终配置:

    # 清屏并显示最终配置

clear
echo "=============================="
echo -e "${GREEN}Snell 服务器安装成功!${NC}"
echo "=============================="
echo ""
echo -e "请在 Surge 中添加以下配置:"
echo ""
echo -e "${GREEN}MySnell = snell, ${SERVER_IP}, ${PORT}, psk=${PSK}, version=4${NC}"
echo ""
echo "===============================

完整脚本
将以上所有步骤组合在一起,你就得到了一个完整的 install_snell.sh 脚本。你可以将它保存,然后通过以下命令赋予执行权限并运行:
chmod +x install_snell.sh
./install_snell.sh

By Qi On
此页面评论区已关闭