#!/bin/bash
# 输出颜色
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# 提示用户操作风险
confirm_action() {
echo -e "\033[1;33m 注意: 此脚本将安装多个工具和服务, 可能会修改系统配置, 带来潜在的安全风险!!!\033[0m"
read -p "是否继续执行? (y/n): " CONFIRM
if [[ "$CONFIRM" != "y" ]]; then
echo "操作已取消。"
exit 0
fi
}
# 检查是否以 root 权限运行
if [ "$(id -u)" -ne 0 ]; then
echo "请以 root 用户运行此脚本!!!"
exit 1
fi
# 检测操作系统和包管理器
detect_package_manager() {
if command -v apt &> /dev/null; then
PACKAGE_MANAGER="apt"
elif command -v yum &> /dev/null; then
PACKAGE_MANAGER="yum"
else
echo "无法检测到支持的包管理器 (apt 或 yum), 请手动安装必要的依赖。"
exit 1
fi
}
# 安装必要工具
install_packages() {
if [ "$PACKAGE_MANAGER" = "apt" ]; then
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/cloudflare-client.list
apt update && apt install -y curl wget unzip openssl cloudflare-warp
elif [ "$PACKAGE_MANAGER" = "yum" ]; then
curl -fsSl https://pkg.cloudflareclient.com/cloudflare-warp-ascii.repo | tee /etc/yum.repos.d/cloudflare-warp.repo
yum install -y epel-release
yum install -y curl wget unzip openssl cloudflare-warp
fi
}
# 变量定义
DOMAIN=${1:-"example.com"} # 如果未提供域名参数,则默认使用 example.com
DAYS_VALID=365 # 证书有效期(天数)
CERT_DIR="/usr/local/etc/xray" # 证书存储目录
# 创建存储目录
mkdir -p ${CERT_DIR}
# 生成私钥
openssl genrsa -out ${CERT_DIR}/${DOMAIN}.key 2048
# 生成证书签名请求( CSR )
openssl req -new -key ${CERT_DIR}/${DOMAIN}.key -out ${CERT_DIR}/${DOMAIN}.csr -subj "/CN=${DOMAIN}"
# 生成自签名证书
openssl x509 -req -days ${DAYS_VALID} -in ${CERT_DIR}/${DOMAIN}.csr -signkey ${CERT_DIR}/${DOMAIN}.key -out ${CERT_DIR}/${DOMAIN}.crt
# 安装 Xray-core
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
UUID=$(xray uuid)
cat >> /usr/local/etc/xray/config.json << EOF
{
"inbounds": [
{
"tag": "direct",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "${UUID}",
"flow": ""
}
],
"decryption": "none",
"fallbacks": []
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"serverNames": [
""
],
"alpn": [
"h2",
"http/1.1"
],
"certificates": [
{
"certificateFile": "${CERT_DIR}/${DOMAIN}.crt",
"keyFile": "${CERT_DIR}/${DOMAIN}.key"
}
]
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
],
"routeOnly": true
}
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom"
},
{
"tag": "warp",
"protocol": "socks",
"settings": {
"servers": [
{
"address": "127.0.0.1",
"port": 2333
}
]
}
}
],
"routing": {
"rules": [
{
"type": "field",
"outboundTag": "warp",
"domain": [
"domain:openai.com",
"domain:chatgpt.com",
"domain:ai.com",
"domain:chat.com",
"domain:cloudflare.com",
"domain:youtube.com",
"domain:netflix.com"
]
}
]
}
}
EOF
systemctl enable xray
# 配置 Cloudflare WARP
warp-cli mode proxy
warp-cli proxy port 2333
warp-cli registration new
warp-cli connect
systemctl enable warp-svc
# 获取公网 IP 地址
get_public_ip() {
# 使用主服务获取 IP
IP=$(curl -s ifconfig.me)
if [ -z "$IP" ]; then
echo "主服务 ifconfig.me 不可用,尝试其他服务..."
# 备选服务 1: ipinfo.io
IP=$(curl -s ipinfo.io/ip)
if [ -z "$IP" ]; then
echo "备选服务 ipinfo.io 不可用,尝试其他服务..."
# 备选服务 2: ip-api.com
IP=$(curl -s http://ip-api.com/line?fields=query)
if [ -z "$IP" ]; then
echo "无法获取公网 IP 地址,请检查网络连接。"
IP="未知"
fi
fi
fi
echo "$IP"
}
# 调用函数获取 IP 地址
IP=$(get_public_ip)
# 输出结果
echo "可使用以下命令查看服务状态:"
echo " systemctl status xray # 检查 Xray 服务状态"
echo " warp-cli status # 检查 WARP 状态"
echo -e "uuid: ${UUID}"
echo -e "本机公网 IP 地址: ${IP}"
echo "xray-core 配置文件路径: /usr/local/etc/xray/config.json"
1
mumbler 17 天前
这问题你应该问 GPT 啊,自己写,自己反思,自己修改
或者让 GPT 写,让 claude 检查,人很金贵,别费人 |
2
kneo 16 天前 4
自己测一下。谁有空帮你看这玩意。
|
3
success95 16 天前 via iPhone
这个脚本实现了什么功能?
|
4
LanhuaMa 16 天前
> 这个代码有没有问题?
> 从表面看,你的脚本没有明显语法错误,但有几点需要注意的可能问题或改进: 1. 操作系统兼容性: • 检测包管理器只检 哦,论坛不能贴 GPT 的回复耶。你不会自己用 GPT 检查一遍吗? |
5
my3157 16 天前 via Android 1
个人习惯,超过 50 行/有大量判等/逻辑复杂 的脚本绝不用 shell
|
7
zhangeric 16 天前
整个虚拟机,做好快照,随便测,出问题了恢复就行了.
|
8
iorilu 16 天前 via Android
起个 docker 容器运行下不就知道了,几秒钟的事
|
9
HojiOShi 16 天前
要点碧莲,付费服务就别白嫖了,看不懂不敢用就自己查文档。我当初自建魔法也是自己查资料查的。
|
10
hulooq 16 天前
你在找免费劳工呢。。。
|
11
XDiLa 16 天前
自己执行测试一下就好了啊 这种破事还让别人帮你测? 你又不是大奶萌妹
|
12
cherishwinner334 16 天前
为什么这种帖子也能发出来?人干事?还是拿我们训练模型呢😂😂
|
13
vczyh 16 天前
你说你🐎呢
|
14
MEIerer 16 天前 1
。。。。。第一次见你这种帖
|
15
wangtian2020 16 天前
玩○玩的
|
16
dyncan 16 天前
都在搬砖呢, 哪有空看啊.
|
17
clino 16 天前
建议先问一下 AI:“新手在论坛上问软件技术问题有什么注意事项”
|
18
InDom 16 天前
粗略看了一下脚本,确实发现了两个问题,一个小问题,改不改影响应该不大,另一个问题可能会出现预期外的操作,不过还得看你到底要什么需求。
有预算的话,可以私聊我聊一聊这个问题,咨询费 100 元/小时,先付费后解答。 |
19
leinad59 16 天前
|
20
alamak76 16 天前
|
21
Asakijz 16 天前
你这个脚本是想实现啥?
|
22
henix 16 天前
用 shellcheck 静态检查一下
|
23
renmu 16 天前 via Android
搁这找喷呢
|
24
aegon466 16 天前 via iPhone
可以用自己熟悉的语言写逻辑然后脚本调用
|
25
iv8d 16 天前
你再问一下 gpt 该 shell 是否有问题
|
26
m1nm13 16 天前
好好好.这回把 V 友当 GPT 来用了
|
27
gerefoxing 16 天前
太长不看
|