feat: flags in install.sh for silent installation (#1766)

* feat: flags in install.sh for silent installation
* chore: revise install.sh script
* Update install.sh
This commit is contained in:
M Rizky Satrio 2025-07-05 17:20:44 +07:00 committed by GitHub
parent 3232781a6d
commit ffc464ba39
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,5 +1,77 @@
#!/usr/bin/env bash #!/usr/bin/env bash
print_help() {
cat <<EOF
Usage: $0 [-s] -t <type> [-u <webuser>] [-p <password>]
Options:
-s Suppress installation confirmation prompt (sets myQST=y)
-t <type> Type of installation (required if -s is used):
h - hive (requires -u and -p)
s - sensor (no user/pass required)
l - llm (requires -u and -p)
i - mini (requires -u and -p)
m - mobile (no user/pass required)
t - tarpit (requires -u and -p)
-u <webuser> Web interface username (required for h/l/i/t)
-p <password> Web interface password (required for h/l/i/t)
-h Show this help message
EOF
exit 1
}
validate_type() {
[[ "$myTPOT_TYPE" =~ ^[hslimtHSLIMT]$ ]] || {
echo "Invalid installation type: $myTPOT_TYPE"
print_help
}
}
# Defaults
myQST=""
myTPOT_TYPE=""
myWEB_USER=""
myWEB_PW=""
while getopts ":st:u:p:h" opt; do
case "$opt" in
s)
myQST="y"
;;
t)
myTPOT_TYPE="${OPTARG,,}"
validate_type
;;
u)
export myWEB_USER="${OPTARG}"
;;
p)
export myWEB_PW="${OPTARG}"
;;
h|\?)
print_help
;;
:)
echo "Option -${OPTARG} requires an argument."
print_help
;;
esac
done
# -s requires -t
if [[ "$myQST" == "y" && -z "$myTPOT_TYPE" ]]; then
echo "Error: -t is required when using -s to suppress interaction."
print_help
fi
# Determine if user/pass are required based on install type
if [[ "$myTPOT_TYPE" =~ ^[hlit]$ ]]; then
[[ -n "$myWEB_USER" && -n "$myWEB_PW" ]] || {
echo "Error: -u and -p are required for installation type '$myTPOT_TYPE'."
print_help
}
fi
myINSTALL_NOTIFICATION="### Now installing required packages ..." myINSTALL_NOTIFICATION="### Now installing required packages ..."
myUSER=$(whoami) myUSER=$(whoami)
myTPOT_CONF_FILE="/home/${myUSER}/tpotce/.env" myTPOT_CONF_FILE="/home/${myUSER}/tpotce/.env"
@ -43,12 +115,13 @@ echo "$myINSTALLER"
echo echo
echo echo
echo "### This script will now install T-Pot and all of its dependencies." echo "### This script will now install T-Pot and all of its dependencies."
while [ "${myQST}" != "y" ] && [ "${myQST}" != "n" ]; if [[ -z "$myQST" ]]; then
do while [ "${myQST}" != "y" ] && [ "${myQST}" != "n" ]; do
echo echo
read -p "### Install? (y/n) " myQST read -p "### Install? (y/n) " myQST
echo echo
done done
fi
if [ "${myQST}" = "n" ]; if [ "${myQST}" = "n" ];
then then
echo echo
@ -183,7 +256,10 @@ echo "### Feed data endlessly to attackers, bots and scanners."
echo "### Also runs a Denial of Service Honeypot (ddospot)." echo "### Also runs a Denial of Service Honeypot (ddospot)."
echo echo
while true; do while true; do
read -p "### Install Type? (h/s/l/i/m/t) " myTPOT_TYPE if [[ -z "$myTPOT_TYPE" ]]; then
read -p "### Install Type? (h/s/l/i/m/t) " myTPOT_TYPE
fi
case "${myTPOT_TYPE}" in case "${myTPOT_TYPE}" in
h|H) h|H)
echo echo
@ -234,75 +310,71 @@ done
if [ "${myTPOT_TYPE}" == "HIVE" ]; if [ "${myTPOT_TYPE}" == "HIVE" ];
# If T-Pot Type is HIVE ask for WebUI username and password # If T-Pot Type is HIVE ask for WebUI username and password
then then
# Preparing web user for T-Pot # Preparing web user for T-Pot
echo echo
echo "### T-Pot User Configuration ..." echo "### T-Pot User Configuration ..."
echo echo
# Asking for web user name # Asking for web user name
myWEB_USER="" if [[ -z "$myWEB_USER" ]]; then
while [ 1 != 2 ]; myWEB_USER=""
do while [ 1 != 2 ]; do
myOK="" myOK=""
read -rp "### Enter your web user name: " myWEB_USER read -rp "### Enter your web user name: " myWEB_USER
myWEB_USER=$(echo $myWEB_USER | tr -cd "[:alnum:]_.-") myWEB_USER=$(echo $myWEB_USER | tr -cd "[:alnum:]_.-")
echo "### Your username is: ${myWEB_USER}" echo "### Your username is: ${myWEB_USER}"
while [[ ! "${myOK}" =~ [YyNn] ]]; while [[ ! "${myOK}" =~ [YyNn] ]]; do
do read -rp "### Is this correct? (y/n) " myOK
read -rp "### Is this correct? (y/n) " myOK done
done if [[ "${myOK}" =~ [Yy] ]] && [ "$myWEB_USER" != "" ]; then
if [[ "${myOK}" =~ [Yy] ]] && [ "$myWEB_USER" != "" ]; break
then else
break echo
else fi
echo done
fi fi
done
# Asking for web user password # Asking for web user password
myWEB_PW="pass1" if [[ -z "$myWEB_PW" ]]; then
myWEB_PW2="pass2" myWEB_PW="pass1"
mySECURE=0 myWEB_PW2="pass2"
myOK="" mySECURE=0
while [ "${myWEB_PW}" != "${myWEB_PW2}" ] && [ "${mySECURE}" == "0" ] myOK=""
do while [ "${myWEB_PW}" != "${myWEB_PW2}" ] && [ "${mySECURE}" == "0" ]; do
echo echo
while [ "${myWEB_PW}" == "pass1" ] || [ "${myWEB_PW}" == "" ] while [ "${myWEB_PW}" == "pass1" ] || [ "${myWEB_PW}" == "" ]; do
do read -rsp "### Enter password for your web user: " myWEB_PW
read -rsp "### Enter password for your web user: " myWEB_PW echo
echo done
done read -rsp "### Repeat password you your web user: " myWEB_PW2
read -rsp "### Repeat password you your web user: " myWEB_PW2 echo
echo if [ "${myWEB_PW}" != "${myWEB_PW2}" ]; then
if [ "${myWEB_PW}" != "${myWEB_PW2}" ]; echo "### Passwords do not match."
then myWEB_PW="pass1"
echo "### Passwords do not match." myWEB_PW2="pass2"
myWEB_PW="pass1" fi
myWEB_PW2="pass2" mySECURE=$(printf "%s" "$myWEB_PW" | /usr/sbin/cracklib-check | grep -c "OK")
fi if [ "$mySECURE" == "0" ] && [ "$myWEB_PW" == "$myWEB_PW2" ]; then
mySECURE=$(printf "%s" "$myWEB_PW" | /usr/sbin/cracklib-check | grep -c "OK") while [[ ! "${myOK}" =~ [YyNn] ]]; do
if [ "$mySECURE" == "0" ] && [ "$myWEB_PW" == "$myWEB_PW2" ]; read -rp "### Keep insecure password? (y/n) " myOK
then done
while [[ ! "${myOK}" =~ [YyNn] ]]; if [[ "${myOK}" =~ [Nn] ]] || [ "$myWEB_PW" == "" ]; then
do myWEB_PW="pass1"
read -rp "### Keep insecure password? (y/n) " myOK myWEB_PW2="pass2"
done mySECURE=0
if [[ "${myOK}" =~ [Nn] ]] || [ "$myWEB_PW" == "" ]; myOK=""
then fi
myWEB_PW="pass1" fi
myWEB_PW2="pass2" done
mySECURE=0 fi
myOK=""
fi
fi
done
# Write username and password to T-Pot config file
echo "### Creating base64 encoded htpasswd username and password for T-Pot config file: ${myTPOT_CONF_FILE}" # Write username and password to T-Pot config file
myWEB_USER_ENC=$(htpasswd -b -n "${myWEB_USER}" "${myWEB_PW}") echo "### Creating base64 encoded htpasswd username and password for T-Pot config file: ${myTPOT_CONF_FILE}"
myWEB_USER_ENC=$(htpasswd -b -n "${myWEB_USER}" "${myWEB_PW}")
myWEB_USER_ENC_B64=$(echo -n "${myWEB_USER_ENC}" | base64 -w0) myWEB_USER_ENC_B64=$(echo -n "${myWEB_USER_ENC}" | base64 -w0)
echo echo
sed -i "s|^WEB_USER=.*|WEB_USER=${myWEB_USER_ENC_B64}|" ${myTPOT_CONF_FILE} sed -i "s|^WEB_USER=.*|WEB_USER=${myWEB_USER_ENC_B64}|" ${myTPOT_CONF_FILE}
fi fi
# Pull docker images # Pull docker images