├── README.md ├── checksocks5.sh └── ct8socks.sh /README.md: -------------------------------------------------------------------------------- 1 | # ct8socks 2 | # 由于很多人反应pm2造成资源占用高,可能是导致账号被BAN的原因,所以这里极其不推荐任何人使用这个脚本,以免被BAN,并且尽早卸载ct8上的pm2!!! 3 | 4 | **ct8创建socks5的一键脚本** 5 | 6 | 2024/7/28 手滑脚本里有个地方少打了个“5”,现在加上去了。有问题的再覆盖安装一次。 7 | 8 | ### 运行前提:你必须先要登录CT8的面板,去允许自定义程序和开启一个TCP端口。 9 | 10 | 用法: 11 | 12 | 1. 直接 `wget https://github.com/Neomanbeta/ct8socks/raw/main/ct8socks.sh && chmod +x ct8socks.sh && ./ct8socks.sh` 然后你就可以跳过2和3,直接看4了。 13 | 14 | 3. 或者ssh登录你的ct8服务器,输入nano ct8socks.sh,然后把ct8socks.sh里面所有的内容黏贴进去,保存退出。或者用winscp等任何支持sshftp的软件直接把ct8socks.sh传上去。 15 | 16 | 5. 给脚本赋予运行权限chmod +x ct8socks.sh 17 | 18 | 7. 运行脚本`./ct8socks.sh` 19 | 20 | 9. 根据脚本的提示信息进行操作,中途可能需要你停止脚本重连ssh(为了让pm2生效),这里没有条件过多测试,反正提示你成功安装pm2了,接下来出错不能继续了,你就断开ssh再重新连接,按照3的命令再重新运行脚本。 21 | 22 | 11. 里面需要你输入的只有3个地方,socks5的端口,socks5的用户名,socks5的密码,然后等待安装完成。 23 | 24 | 13. 进行保活,下载仓库中的`checksocks5.sh`放到`/domains/用户名小写.ct8.pl/socks5/`目录下,或者自己手动进入到这个目录`nano checksocks5.sh`,把`checksocks5.sh`里面的所有内容黏贴进去保存并退出,这个脚本必须和`socks5.js`同目录,否则会判断失败。 25 | 26 | 15. 赋予`checksocks5.sh`运行权限`chmod +x checksocks5.sh` 27 | 28 | # 说明: 29 | 30 | 这个脚本会给你安装pm2然后用pm2管理并运行一个socks5代理。 31 | 32 | 你可以在socks5.js所在目录下运行pm2 status来查看代理的运行状态,或者用pm2 stop socks_proxy来停止代理服务。 33 | 34 | 在成功运行并启动socks5代理以后,脚本最后会提示“代理工作正常,脚本结束”,然后你需要用crontab来给代理保活 35 | 36 | ssh连接后输入crontab -e,然后把这段里面的两处中文改成对应的你自己的信息,再黏贴进去(这是一分钟执行一次,自己改成需要的时长) 37 | 38 | `* * * * * /home/用户名/domains/用户名小写.ct8.pl/socks5/checksocks5.sh > /dev/null 2>&1` 39 | 40 | **提醒一下,无任何售后服务,脚本也不会再更新,因为CT8已经把我账号BAN了,所以其实这个脚本我并没有完全修改完,你们想用的就用吧。** 41 | -------------------------------------------------------------------------------- /checksocks5.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 名为 socks5_proxy 的 pm2 进程名称 4 | PROCESS_NAME="socks5_proxy" 5 | 6 | # 设置 PATH,确保 pm2 命令可用 7 | export PATH=/home/$USER/.npm-global/bin:$PATH 8 | 9 | # 确保 pm2 命令在远程vps保活脚本中可用 10 | PM2_CMD="/home/$USER/.npm-global/bin/pm2" 11 | 12 | # socks5.js 文件路径 13 | WORK_DIR="/home/$USER/domains/${USER,,}.ct8.pl/socks5" 14 | WORK_SCRIPT="socks5.js" 15 | SCRIPT_PATH="$WORK_DIR/$WORK_SCRIPT" 16 | 17 | # 检查 pm2 是否在运行 18 | $PM2_CMD status &> /dev/null 19 | if [ $? -ne 0 ]; then 20 | echo -e "\033[32mPM2 未运行。正在启动 PM2...\033[0m" 21 | $PM2_CMD resurrect 22 | fi 23 | 24 | # 获取 socks5_proxy 进程的状态 25 | PROCESS_STATUS=$($PM2_CMD info $PROCESS_NAME 2>/dev/null | grep status | awk '{print $4}') 26 | 27 | # 如果进程未运行或已停止 28 | if [ "$PROCESS_STATUS" != "online" ]; then 29 | echo -e "\033[32m进程 $PROCESS_NAME 未运行或已停止。正在启动新进程...\033[0m" 30 | # 确保进入正确的脚本目录 31 | cd $WORK_DIR || { echo "Failed to cd to $WORK_DIR"; exit 1; } 32 | $PM2_CMD start $SCRIPT_PATH --name $PROCESS_NAME --cwd $WORK_DIR 33 | else 34 | echo -e "\033[32m进程 $PROCESS_NAME 已经在运行。\033[0m" 35 | RUNNING_TIME=$($PM2_CMD info $PROCESS_NAME | grep "uptime" | awk '{print $4 " " $5 " " $6}') 36 | echo -e "\033[32m进程 $PROCESS_NAME 已经运行了 $RUNNING_TIME。\033[0m" 37 | fi 38 | -------------------------------------------------------------------------------- /ct8socks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 介绍信息 4 | echo -e "\e[32m 5 | ____ ___ ____ _ ______ ____ 6 | / ___| / _ \ / ___| |/ / ___| ___| 脚本作者TG:@RealNeoMan 7 | \___ \| | | | | | ' /\___ \___ \ 8 | ___) | |_| | |___| . \ ___) |__) | 不要直连 9 | |____/ \___/ \____|_|\_\____/____/ 没有售后 10 | \e[0m" 11 | 12 | # 获取当前用户名 13 | USER=$(whoami) 14 | 15 | # 检查pm2是否已安装并可用 16 | if command -v pm2 > /dev/null 2>&1 && [[ $(which pm2) == "/home/${USER,,}/.npm-global/bin/pm2" ]]; then 17 | echo "pm2已安装且可用,跳过安装步骤。" 18 | else 19 | # 安装pm2 20 | echo "正在安装pm2,请稍候..." 21 | curl -s https://raw.githubusercontent.com/k0baya/alist_repl/main/serv00/install-pm2.sh | bash 22 | 23 | if [ $? -ne 0 ]; then 24 | echo "pm2安装失败,请检查网络连接或稍后再试。" 25 | exit 1 26 | fi 27 | echo "pm2安装成功。" 28 | 29 | # 检查pm2路径 30 | if [[ $(which pm2) != "/home/${USER,,}/.npm-global/bin/pm2" ]]; then 31 | echo "pm2未正确配置。请断开并重新连接SSH后再运行此脚本。" 32 | exit 1 33 | fi 34 | fi 35 | 36 | # 检查socks5目录是否存在 37 | SOCKS5_DIR=~/domains/${USER,,}.ct8.pl/socks5 38 | if [ -d "$SOCKS5_DIR" ]; then 39 | read -p "目录$SOCKS5_DIR已经存在,是否继续安装?(Y/N): " CONTINUE_INSTALL 40 | CONTINUE_INSTALL=${CONTINUE_INSTALL^^} # 转换为大写 41 | if [ "$CONTINUE_INSTALL" != "Y" ]; then 42 | echo "安装已取消。" 43 | exit 1 44 | fi 45 | else 46 | # 创建socks5目录 47 | echo "正在创建socks5目录..." 48 | mkdir -p "$SOCKS5_DIR" 49 | fi 50 | 51 | cd "$SOCKS5_DIR" 52 | 53 | # 检查node-socks5-server是否已安装 54 | if npm list node-socks5-server > /dev/null 2>&1; then 55 | echo "node-socks5-server已安装,跳过安装步骤。" 56 | else 57 | # 初始化npm项目 58 | echo "正在初始化npm项目..." 59 | npm init -y 60 | 61 | # 安装node-socks5-server 62 | echo "正在安装node-socks5-server,请稍候..." 63 | npm install node-socks5-server 64 | 65 | if [ $? -ne 0 ]; then 66 | echo "node-socks5-server安装失败,请检查网络连接或稍后再试。" 67 | exit 1 68 | fi 69 | echo "node-socks5-server安装成功。" 70 | fi 71 | 72 | # 检查socks5.js文件是否存在 73 | SOCKS5_JS="$SOCKS5_DIR/socks5.js" 74 | if [ -f "$SOCKS5_JS" ]; then 75 | read -p "当前目录下已经有socks5.js文件,是否要覆盖?(Y/N): " OVERWRITE_FILE 76 | OVERWRITE_FILE=${OVERWRITE_FILE^^} # 转换为大写 77 | if [ "$OVERWRITE_FILE" != "Y" ]; then 78 | echo "文件未覆盖,安装已取消。" 79 | exit 1 80 | fi 81 | fi 82 | 83 | # 提示用户输入socks5端口号 84 | read -p "请输入socks5端口号: " SOCKS5_PORT 85 | 86 | # 生成socks5.js文件 87 | cat < socks5.js 88 | 'use strict'; 89 | 90 | const socks5 = require('node-socks5-server'); 91 | 92 | const users = { 93 | 'user': 'password', 94 | }; 95 | 96 | const userPassAuthFn = (user, password) => { 97 | if (users[user] === password) return true; 98 | return false; 99 | }; 100 | 101 | const server = socks5.createServer({ 102 | userPassAuthFn, 103 | }); 104 | server.listen($SOCKS5_PORT); 105 | EOF 106 | 107 | # 提示用户输入用户名和密码 108 | read -p "请输入socks5用户名: " SOCKS5_USER 109 | 110 | while true; do 111 | read -p "请输入socks5密码(不能包含@和:):" SOCKS5_PASS 112 | echo 113 | if [[ "$SOCKS5_PASS" == *"@"* || "$SOCKS5_PASS" == *":"* ]]; then 114 | echo "密码中不能包含@和:符号,请重新输入。" 115 | else 116 | break 117 | fi 118 | done 119 | 120 | # 修改socks5.js文件中的用户名和密码 121 | sed -i '' "s/'user': 'password'/'$SOCKS5_USER': '$SOCKS5_PASS'/" socks5.js 122 | 123 | # 检查并删除已存在的同名pm2进程 124 | if pm2 list | grep -q socks5_proxy; then 125 | pm2 stop socks5_proxy 126 | pm2 delete socks5_proxy 127 | fi 128 | 129 | # 启动socks5.js代理 130 | echo "正在启动socks5代理..." 131 | pm2 start socks5.js --name socks5_proxy 132 | 133 | # 延迟检测以确保代理启动 134 | echo "等待代理启动..." 135 | sleep 5 136 | 137 | # 检查pm2中进程的运行状态 138 | PM2_STATUS=$(pm2 show socks5_proxy | grep status | awk '{print $4}') 139 | if [ "$PM2_STATUS" == "online" ]; then 140 | echo "代理服务已启动。正在检查代理运行状态..." 141 | CURL_OUTPUT=$(curl -s ip.sb --socks5 $SOCKS5_USER:$SOCKS5_PASS@localhost:$SOCKS5_PORT) 142 | if [[ $CURL_OUTPUT =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then 143 | echo "代理创建成功,返回的IP是: $CURL_OUTPUT" 144 | echo "代理工作正常,脚本结束。" 145 | else 146 | echo "代理创建失败,请检查自己输入的内容。" 147 | pm2 stop socks5_proxy 148 | pm2 delete socks5_proxy 149 | exit 1 150 | fi 151 | else 152 | echo "代理服务启动失败,请检查配置。" 153 | exit 1 154 | fi 155 | --------------------------------------------------------------------------------