feat(脚本): sing-box兼容添加用户、删除用户功能

pull/883/head^2
mack-a 2023-12-20 16:15:05 +08:00
parent 2220d82a4b
commit 7a95ec222e
1 changed files with 55 additions and 46 deletions

View File

@ -372,6 +372,7 @@ readInstallType() {
fi fi
elif [[ -d "/etc/v2ray-agent/sing-box" && -f "/etc/v2ray-agent/sing-box/sing-box" && -f "/etc/v2ray-agent/sing-box/conf/config.json" ]]; then elif [[ -d "/etc/v2ray-agent/sing-box" && -f "/etc/v2ray-agent/sing-box/sing-box" && -f "/etc/v2ray-agent/sing-box/conf/config.json" ]]; then
# 检测sing-box # 检测sing-box
ctlPath=/etc/v2ray-agent/sing-box/sing-box
coreInstallType=2 coreInstallType=2
configPath=/etc/v2ray-agent/sing-box/conf/config/ configPath=/etc/v2ray-agent/sing-box/conf/config/
singBoxConfigPath=/etc/v2ray-agent/sing-box/conf/config/ singBoxConfigPath=/etc/v2ray-agent/sing-box/conf/config/
@ -626,12 +627,12 @@ unInstallSingBox() {
local type=$1 local type=$1
if [[ -n "${singBoxConfigPath}" ]]; then if [[ -n "${singBoxConfigPath}" ]]; then
if grep -q 'tuic' </etc/v2ray-agent/sing-box/conf/config.json && [[ "${type}" == "tuic" ]]; then if grep -q 'tuic' </etc/v2ray-agent/sing-box/conf/config.json && [[ "${type}" == "tuic" ]]; then
rm "${singBoxConfigPath}tuic.json" rm "${singBoxConfigPath}09_tuic_inbounds.json"
echoContent green " ---> 删除sing-box tuic配置成功" echoContent green " ---> 删除sing-box tuic配置成功"
fi fi
if grep -q 'hysteria2' </etc/v2ray-agent/sing-box/conf/config.json && [[ "${type}" == "hysteria2" ]]; then if grep -q 'hysteria2' </etc/v2ray-agent/sing-box/conf/config.json && [[ "${type}" == "hysteria2" ]]; then
rm "${singBoxConfigPath}hysteria2.json" rm "${singBoxConfigPath}06_hysteria2_inbounds.json"
echoContent green " ---> 删除sing-box hysteria2配置成功" echoContent green " ---> 删除sing-box hysteria2配置成功"
fi fi
rm "${singBoxConfigPath}config.json" rm "${singBoxConfigPath}config.json"
@ -4982,7 +4983,12 @@ customUUID() {
read -r -p "请输入合法的UUID[回车]随机UUID:" currentCustomUUID read -r -p "请输入合法的UUID[回车]随机UUID:" currentCustomUUID
echo echo
if [[ -z "${currentCustomUUID}" ]]; then if [[ -z "${currentCustomUUID}" ]]; then
currentCustomUUID=$(${ctlPath} uuid) if [[ "${selectInstallType}" == "1" || "${coreInstallType}" == "1" ]]; then
currentCustomUUID=$(${ctlPath} uuid)
elif [[ "${selectInstallType}" == "2" || "${coreInstallType}" == "2" ]]; then
currentCustomUUID=$(${ctlPath} generate uuid)
fi
echoContent yellow "uuid${currentCustomUUID}\n" echoContent yellow "uuid${currentCustomUUID}\n"
else else
@ -5035,6 +5041,12 @@ addUser() {
echoContent red " ---> 输入有误,请重新输入" echoContent red " ---> 输入有误,请重新输入"
exit 0 exit 0
fi fi
local userConfig=
if [[ "${coreInstallType}" == "1" ]]; then
userConfig=".inbounds[0].settings.clients"
elif [[ "${coreInstallType}" == "2" ]]; then
userConfig=".inbounds[0].users"
fi
while [[ ${userNum} -gt 0 ]]; do while [[ ${userNum} -gt 0 ]]; do
readConfigHostPathUUID readConfigHostPathUUID
@ -5053,10 +5065,9 @@ addUser() {
if [[ "${coreInstallType}" == "1" ]]; then if [[ "${coreInstallType}" == "1" ]]; then
clients=$(initXrayClients 0 "${uuid}" "${email}") clients=$(initXrayClients 0 "${uuid}" "${email}")
elif [[ "${coreInstallType}" == "2" ]]; then elif [[ "${coreInstallType}" == "2" ]]; then
clients=$(initXrayClients 0 "${uuid}" "${email}") clients=$(initSingBoxClients 0 "${uuid}" "${email}")
fi fi
clients=$(jq -r "${userConfig} = ${clients}" ${configPath}${frontingType}.json)
clients=$(jq -r ".inbounds[0].settings.clients = ${clients}" ${configPath}${frontingType}.json)
echo "${clients}" | jq . >${configPath}${frontingType}.json echo "${clients}" | jq . >${configPath}${frontingType}.json
fi fi
@ -5069,7 +5080,7 @@ addUser() {
clients=$(initSingBoxClients 1 "${uuid}" "${email}") clients=$(initSingBoxClients 1 "${uuid}" "${email}")
fi fi
clients=$(jq -r ".inbounds[0].settings.clients = ${clients}" ${configPath}03_VLESS_WS_inbounds.json) clients=$(jq -r "${userConfig} = ${clients}" ${configPath}03_VLESS_WS_inbounds.json)
echo "${clients}" | jq . >${configPath}03_VLESS_WS_inbounds.json echo "${clients}" | jq . >${configPath}03_VLESS_WS_inbounds.json
fi fi
@ -5082,7 +5093,7 @@ addUser() {
clients=$(initSingBoxClients 2 "${uuid}" "${email}") clients=$(initSingBoxClients 2 "${uuid}" "${email}")
fi fi
clients=$(jq -r ".inbounds[0].settings.clients = ${clients}" ${configPath}04_trojan_gRPC_inbounds.json) clients=$(jq -r "${userConfig} = ${clients}" ${configPath}04_trojan_gRPC_inbounds.json)
echo "${clients}" | jq . >${configPath}04_trojan_gRPC_inbounds.json echo "${clients}" | jq . >${configPath}04_trojan_gRPC_inbounds.json
fi fi
# VMess WS # VMess WS
@ -5094,7 +5105,7 @@ addUser() {
clients=$(initSingBoxClients 3 "${uuid}" "${email}") clients=$(initSingBoxClients 3 "${uuid}" "${email}")
fi fi
clients=$(jq -r ".inbounds[0].settings.clients = ${clients}" ${configPath}05_VMess_WS_inbounds.json) clients=$(jq -r "${userConfig} = ${clients}" ${configPath}05_VMess_WS_inbounds.json)
echo "${clients}" | jq . >${configPath}05_VMess_WS_inbounds.json echo "${clients}" | jq . >${configPath}05_VMess_WS_inbounds.json
fi fi
@ -5106,7 +5117,7 @@ addUser() {
elif [[ "${coreInstallType}" == "2" ]]; then elif [[ "${coreInstallType}" == "2" ]]; then
clients=$(initSingBoxClients 4 "${uuid}" "${email}") clients=$(initSingBoxClients 4 "${uuid}" "${email}")
fi fi
clients=$(jq -r ".inbounds[0].settings.clients = ${clients}" ${configPath}04_trojan_TCP_inbounds.json) clients=$(jq -r "${userConfig} = ${clients}" ${configPath}04_trojan_TCP_inbounds.json)
echo "${clients}" | jq . >${configPath}04_trojan_TCP_inbounds.json echo "${clients}" | jq . >${configPath}04_trojan_TCP_inbounds.json
fi fi
@ -5118,7 +5129,7 @@ addUser() {
elif [[ "${coreInstallType}" == "2" ]]; then elif [[ "${coreInstallType}" == "2" ]]; then
clients=$(initSingBoxClients 5 "${uuid}" "${email}") clients=$(initSingBoxClients 5 "${uuid}" "${email}")
fi fi
clients=$(jq -r ".inbounds[0].settings.clients = ${clients}" ${configPath}06_VLESS_gRPC_inbounds.json) clients=$(jq -r "${userConfig} = ${clients}" ${configPath}06_VLESS_gRPC_inbounds.json)
echo "${clients}" | jq . >${configPath}06_VLESS_gRPC_inbounds.json echo "${clients}" | jq . >${configPath}06_VLESS_gRPC_inbounds.json
fi fi
@ -5130,7 +5141,7 @@ addUser() {
elif [[ "${coreInstallType}" == "2" ]]; then elif [[ "${coreInstallType}" == "2" ]]; then
clients=$(initSingBoxClients 7 "${uuid}" "${email}") clients=$(initSingBoxClients 7 "${uuid}" "${email}")
fi fi
clients=$(jq -r ".inbounds[0].settings.clients = ${clients}" ${configPath}07_VLESS_vision_reality_inbounds.json) clients=$(jq -r "${userConfig} = ${clients}" ${configPath}07_VLESS_vision_reality_inbounds.json)
echo "${clients}" | jq . >${configPath}07_VLESS_vision_reality_inbounds.json echo "${clients}" | jq . >${configPath}07_VLESS_vision_reality_inbounds.json
fi fi
@ -5142,7 +5153,7 @@ addUser() {
elif [[ "${coreInstallType}" == "2" ]]; then elif [[ "${coreInstallType}" == "2" ]]; then
clients=$(initSingBoxClients 8 "${uuid}" "${email}") clients=$(initSingBoxClients 8 "${uuid}" "${email}")
fi fi
clients=$(jq -r ".inbounds[0].settings.clients = ${clients}" ${configPath}08_VLESS_vision_gRPC_inbounds.json) clients=$(jq -r "${userConfig} = ${clients}" ${configPath}08_VLESS_vision_gRPC_inbounds.json)
echo "${clients}" | jq . >${configPath}08_VLESS_vision_gRPC_inbounds.json echo "${clients}" | jq . >${configPath}08_VLESS_vision_gRPC_inbounds.json
fi fi
@ -5156,8 +5167,8 @@ addUser() {
clients=$(initSingBoxClients 6 "${uuid}" "${email}") clients=$(initSingBoxClients 6 "${uuid}" "${email}")
fi fi
clients=$(jq -r ".inbounds[0].users = ${clients}" "${singBoxConfigPath}hysteria2.json") clients=$(jq -r ".inbounds[0].users = ${clients}" "${singBoxConfigPath}06_hysteria2_inbounds.json")
echo "${clients}" | jq . >"${singBoxConfigPath}hysteria2.json" echo "${clients}" | jq . >"${singBoxConfigPath}06_hysteria2_inbounds.json"
fi fi
# tuic # tuic
@ -5169,9 +5180,9 @@ addUser() {
clients=$(initSingBoxClients 9 "${uuid}" "${email}") clients=$(initSingBoxClients 9 "${uuid}" "${email}")
fi fi
clients=$(jq -r ".inbounds[0].users = ${clients}" "${singBoxConfigPath}tuic.json") clients=$(jq -r ".inbounds[0].users = ${clients}" "${singBoxConfigPath}09_tuic_inbounds.json")
echo "${clients}" | jq . >"${singBoxConfigPath}tuic.json" echo "${clients}" | jq . >"${singBoxConfigPath}09_tuic_inbounds.json"
fi fi
done done
reloadCore reloadCore
@ -5180,34 +5191,36 @@ addUser() {
} }
# 移除用户 # 移除用户
removeUser() { removeUser() {
local userConfigType=
if [[ -n "${frontingType}" ]]; then
userConfigType="${frontingType}"
elif [[ -n "${frontingTypeReality}" ]]; then
userConfigType="${frontingTypeReality}"
fi
local uuid= local uuid=
if echo ${currentInstallProtocolType} | grep -q 0 || echo ${currentInstallProtocolType} | grep -q trojan; then if [[ -n "${userConfigType}" ]]; then
jq -r -c .inbounds[0].settings.clients[].email ${configPath}${frontingType}.json | awk '{print NR""":"$0}' if [[ "${coreInstallType}" == "1" ]]; then
read -r -p "请选择要删除的用户编号[仅支持单个删除]:" delUserIndex jq -r -c .inbounds[0].settings.clients[].email ${configPath}${userConfigType}.json | awk '{print NR""":"$0}'
if [[ $(jq -r '.inbounds[0].settings.clients|length' ${configPath}${frontingType}.json) -lt ${delUserIndex} ]]; then elif [[ "${coreInstallType}" == "2" ]]; then
echoContent red " ---> 选择错误" jq -r -c .inbounds[0].users[].name ${configPath}${userConfigType}.json | awk '{print NR""":"$0}'
else
delUserIndex=$((delUserIndex - 1))
local vlessTcpResult
uuid=$(jq -r ".inbounds[0].settings.clients[${delUserIndex}].id" ${configPath}${frontingType}.json)
vlessTcpResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}${frontingType}.json)
echo "${vlessTcpResult}" | jq . >${configPath}${frontingType}.json
fi fi
elif [[ -n "${realityStatus}" ]]; then
jq -r -c .inbounds[0].settings.clients[].email ${configPath}07_VLESS_vision_reality_inbounds.json | awk '{print NR""":"$0}'
read -r -p "请选择要删除的用户编号[仅支持单个删除]:" delUserIndex read -r -p "请选择要删除的用户编号[仅支持单个删除]:" delUserIndex
if [[ $(jq -r '.inbounds[0].settings.clients|length' ${configPath}07_VLESS_vision_reality_inbounds.json) -lt ${delUserIndex} ]]; then if [[ $(jq -r '.inbounds[0].settings.clients|length' ${configPath}${userConfigType}.json) -lt ${delUserIndex} && $(jq -r '.inbounds[0].users|length' ${configPath}${userConfigType}.json) -lt ${delUserIndex} ]]; then
echoContent red " ---> 选择错误" echoContent red " ---> 选择错误"
else else
delUserIndex=$((delUserIndex - 1)) delUserIndex=$((delUserIndex - 1))
local vlessRealityResult
uuid=$(jq -r ".inbounds[0].settings.clients[${delUserIndex}].id" ${configPath}${frontingType}.json)
vlessRealityResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}07_VLESS_vision_reality_inbounds.json)
echo "${vlessRealityResult}" | jq . >${configPath}07_VLESS_vision_reality_inbounds.json
fi fi
fi fi
if [[ -n "${delUserIndex}" ]]; then if [[ -n "${delUserIndex}" ]]; then
if echo ${currentInstallProtocolType} | grep -q 0; then
local vlessVision
vlessVision=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}']//.inbounds[0].users['${delUserIndex}'])' ${configPath}02_VLESS_TCP_inbounds.json)
echo "${vlessVision}" | jq . >${configPath}02_VLESS_TCP_inbounds.json
fi
if echo ${currentInstallProtocolType} | grep -q 1; then if echo ${currentInstallProtocolType} | grep -q 1; then
local vlessWSResult local vlessWSResult
vlessWSResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}03_VLESS_WS_inbounds.json) vlessWSResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}03_VLESS_WS_inbounds.json)
@ -5240,24 +5253,24 @@ removeUser() {
if echo ${currentInstallProtocolType} | grep -q 7; then if echo ${currentInstallProtocolType} | grep -q 7; then
local vlessRealityResult local vlessRealityResult
vlessRealityResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}07_VLESS_vision_reality_inbounds.json) vlessRealityResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}']//.inbounds[0].users['${delUserIndex}'])' ${configPath}07_VLESS_vision_reality_inbounds.json)
echo "${vlessRealityResult}" | jq . >${configPath}07_VLESS_vision_reality_inbounds.json echo "${vlessRealityResult}" | jq . >${configPath}07_VLESS_vision_reality_inbounds.json
fi fi
if echo ${currentInstallProtocolType} | grep -q 8; then if echo ${currentInstallProtocolType} | grep -q 8; then
local vlessRealityGRPCResult local vlessRealityGRPCResult
vlessRealityGRPCResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}08_VLESS_vision_gRPC_inbounds.json) vlessRealityGRPCResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}']//.inbounds[0].users['${delUserIndex}'])' ${configPath}08_VLESS_vision_gRPC_inbounds.json)
echo "${vlessRealityGRPCResult}" | jq . >${configPath}08_VLESS_vision_gRPC_inbounds.json echo "${vlessRealityGRPCResult}" | jq . >${configPath}08_VLESS_vision_gRPC_inbounds.json
fi fi
if echo ${currentInstallProtocolType} | grep -q 6; then if echo ${currentInstallProtocolType} | grep -q 6; then
local hysteriaResult local hysteriaResult
hysteriaResult=$(jq -r 'del(.inbounds[0].users['${delUserIndex}'])' "${singBoxConfigPath}hysteria2.json") hysteriaResult=$(jq -r 'del(.inbounds[0].users['${delUserIndex}'])' "${singBoxConfigPath}06_hysteria2_inbounds.json")
echo "${hysteriaResult}" | jq . >"${singBoxConfigPath}hysteria2.json" echo "${hysteriaResult}" | jq . >"${singBoxConfigPath}06_hysteria2_inbounds.json"
fi fi
if echo ${currentInstallProtocolType} | grep -q 9; then if echo ${currentInstallProtocolType} | grep -q 9; then
local tuicResult local tuicResult
tuicResult=$(jq -r 'del(.inbounds[0].users['${delUserIndex}'])' "${singBoxConfigPath}tuic.json") tuicResult=$(jq -r 'del(.inbounds[0].users['${delUserIndex}'])' "${singBoxConfigPath}09_tuic_inbounds.json")
echo "${tuicResult}" | jq . >"${singBoxConfigPath}tuic.json" echo "${tuicResult}" | jq . >"${singBoxConfigPath}09_tuic_inbounds.json"
fi fi
reloadCore reloadCore
fi fi
@ -7133,10 +7146,6 @@ manageAccount() {
elif [[ "${manageAccountStatus}" == "4" ]]; then elif [[ "${manageAccountStatus}" == "4" ]]; then
addUser addUser
elif [[ "${manageAccountStatus}" == "5" ]]; then elif [[ "${manageAccountStatus}" == "5" ]]; then
if [[ "${coreInstallType}" == "2" ]]; then
echoContent red "\n ---> 此功能仅支持Xray-core内核请等待后续更新"
exit 0
fi
removeUser removeUser
else else
echoContent red " ---> 选择错误" echoContent red " ---> 选择错误"
@ -8256,7 +8265,7 @@ menu() {
cd "$HOME" || exit cd "$HOME" || exit
echoContent red "\n==============================================================" echoContent red "\n=============================================================="
echoContent green "作者mack-a" echoContent green "作者mack-a"
echoContent green "当前版本v3.1.11-beta" echoContent green "当前版本v3.1.12-beta"
echoContent green "Githubhttps://github.com/mack-a/v2ray-agent" echoContent green "Githubhttps://github.com/mack-a/v2ray-agent"
echoContent green "描述:八合一共存脚本\c" echoContent green "描述:八合一共存脚本\c"
showInstallStatus showInstallStatus