-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrun.sh
executable file
·86 lines (76 loc) · 1.96 KB
/
run.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/bin/bash
usage() {
echo "server-trojan -d|--domain <domain-name> -w|--password <password> [-p|--port <port-num>] [-f|--fake <fake-domain>] [-k|--hook <hook-url>]"
echo " -d|--domain <domain-name> Trojan server domain name"
echo " -w|--password <password> Password for Trojan service access"
echo " -p|--port <port-num> [Optional] Port number for incoming Trojan connection, default 443"
echo " -f|--fake <fake-domain> [Optional] Fake domain name when access Trojan without correct password"
echo " -k|--hook <hook-url> [Optional] URL to be hit before server execution, for DDNS update or notification"
}
TEMP=`getopt -o d:w:p:f:k: --long domain:,password:,port:,fake:hook: -n "$0" -- $@`
if [ $? != 0 ] ; then usage; exit 1 ; fi
eval set -- "$TEMP"
while true ; do
case "$1" in
-d|--domain)
DOMAIN="$2"
shift 2
;;
-w|--password)
PASSWORD="$2"
shift 2
;;
-p|--port)
PORT="$2"
shift 2
;;
-f|--fake)
FAKEDOMAIN="$2"
shift 2
;;
-k|--hook)
HOOKURL="$2"
shift 2
;;
--)
shift
break
;;
*)
usage;
exit 1
;;
esac
done
if [ -z "${PASSWORD}" ] || [ -z "${DOMAIN}" ]; then
usage
exit 2
fi
if [ -z "${FAKEDOMAIN}" ]; then
FAKEDOMAIN="www.microsoft.com"
fi
if [ -z "${PORT}" ]; then
PORT=443
fi
if [ -n "${HOOKURL}" ]; then
curl -sSL "${HOOKURL}"
echo
fi
TRY=0
while [ ! -f "/root/.acme.sh/${DOMAIN}/fullchain.cer" ]
do
/root/.acme.sh/acme.sh --issue --standalone -d ${DOMAIN}
((TRY++))
if [ $TRY >= 3 ]; then
echo "Obtian cert for ${DOMAIN} failed. Check log please."
exit 3
fi
done
cat /trojan/examples/server.json-example \
| jq " .\"local_port\" |= ${PORT} " \
| jq " .\"remote_addr\" |= \"${FAKEDOMAIN}\" " \
| jq " .\"password\"[0] |= \"${PASSWORD}\" " \
| jq " .\"ssl\".\"cert\" |= \"/root/.acme.sh/${DOMAIN}/fullchain.cer\" " \
| jq " .\"ssl\".\"key\" |= \"/root/.acme.sh/${DOMAIN}/${DOMAIN}.key\" " \
>/config/server.json
exec /trojan/trojan /config/server.json