#!/usr/bin/env bash export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export TMOUT=0 current_dir=$(cd `dirname "${BASH_SOURCE}"` ; pwd) log_path="${current_dir}"/install.log function InstallLog(){ [[ $# -ne 2 ]] && return 0 case $1 in -E|-e) echo -e "$(date +%Y-%m-%d\ %H:%M:%S) [ERROR] [${FUNCNAME[2]}]: ${2}" >> "${log_path}" echo -e "\033[1;31m$(date +%Y-%m-%d\ %H:%M:%S) [ERROR] [${FUNCNAME[1]}]: ${2}\033[0m" ;; -I|-i) echo -e "$(date +%Y-%m-%d\ %H:%M:%S) [INFO] [${FUNCNAME[2]}]: ${2}" >> "${log_path}" echo -e "\033[1;32m$(date +%Y-%m-%d\ %H:%M:%S) [INFO] [${FUNCNAME[1]}]: ${2}\033[0m" ;; -C|-c) echo -e "$(date +%Y-%m-%d\ %H:%M:%S) [INPUT] [${FUNCNAME[2]}]: ${2}" >> "${log_path}" echo -e "\033[1;34m$(date +%Y-%m-%d\ %H:%M:%S) [INPUT] [${FUNCNAME[1]}]: ${2}\033[0m" ;; -W|-w) echo -e "$(date +%Y-%m-%d\ %H:%M:%S) [WARN] [${FUNCNAME[2]}]: ${2}" >> "${log_path}" echo -e "\033[1;33m$(date +%Y-%m-%d\ %H:%M:%S) [WARN] [${FUNCNAME[1]}]: ${2}\033[0m" ;; *) echo -e "$(date +%Y-%m-%d\ %H:%M:%S)[Other] [${FUNCNAME[2]}]: ${2}" >> "${log_path}" echo -e "$(date +%Y-%m-%d\ %H:%M:%S)[Other] [${FUNCNAME[1]}]: ${2}" esac } function CheckRunning() { TMPFILE=/tmp/install.run if [ -e $TMPFILE ]; then InstallLog -e "Other instance is running!" exit 0 else touch $TMPFILE chmod 600 $TMPFILE fi # shellcheck disable=SC2064 trap "rm -f ${TMPFILE}; exit" 0 1 2 3 15 if [ "$(id -u)" != "0" ]; then InstallLog -e "Require user root to run the script." exit 1 fi } CheckRunning Kill_PM() { if ps aux | grep -E "yum|dnf" | grep -qv "grep"; then kill -9 $(ps -ef|grep -E "yum|dnf"|grep -v grep|awk '{print $2}') if [ -s /var/run/yum.pid ]; then rm -f /var/run/yum.pid fi elif ps aux | grep -E "apt-get|dpkg|apt" | grep -qv "grep"; then kill -9 $(ps -ef|grep -E "apt-get|apt|dpkg"|grep -v grep|awk '{print $2}') if [[ -s /var/lib/dpkg/lock-frontend || -s /var/lib/dpkg/lock ]]; then rm -f /var/lib/dpkg/lock-frontend rm -f /var/lib/dpkg/lock dpkg --configure -a fi fi } Press_Start() { echo "" InstallLog -i "Press any key to start...or Press Ctrl+c to cancel" OLDCONFIG=`stty -g` stty -icanon -echo min 1 time 0 dd count=1 2>/dev/null stty ${OLDCONFIG} } Install_LSB() { echo "[+] Installing lsb..." if [ "$PM" == "yum" ]; then yum -y install redhat-lsb elif [ "$PM" == "apt" ]; then apt-get update apt-get --no-install-recommends install -y lsb-release fi } Get_Dist_Version() { if command -v lsb_release >/dev/null 2>&1; then DISTRO_Version=$(lsb_release -sr) elif [ -f /etc/lsb-release ]; then . /etc/lsb-release DISTRO_Version="$DISTRIB_RELEASE" elif [ -f /etc/os-release ]; then . /etc/os-release DISTRO_Version="$VERSION_ID" fi if [[ "${DISTRO}" = "" || "${DISTRO_Version}" = "" ]]; then if command -v python2 >/dev/null 2>&1; then DISTRO_Version=$(python2 -c 'import platform; print platform.linux_distribution()[1]') elif command -v python3 >/dev/null 2>&1; then DISTRO_Version=$(python3 -c 'import platform; print(platform.linux_distribution()[1])') else Install_LSB DISTRO_Version=`lsb_release -rs` fi fi printf -v "${DISTRO}_Version" '%s' "${DISTRO_Version}" } Get_Dist_Name() { if grep -Eqi "Alibaba" /etc/issue || grep -Eq "Alibaba Cloud Linux" /etc/*-release; then DISTRO='Alibaba' PM='yum' elif grep -Eqi "Aliyun" /etc/issue || grep -Eq "Aliyun Linux" /etc/*-release; then DISTRO='Aliyun' PM='yum' elif grep -Eqi "Amazon Linux" /etc/issue || grep -Eq "Amazon Linux" /etc/*-release; then DISTRO='Amazon' PM='yum' elif grep -Eqi "Fedora" /etc/issue || grep -Eq "Fedora" /etc/*-release; then DISTRO='Fedora' PM='yum' elif grep -Eqi "Oracle Linux" /etc/issue || grep -Eq "Oracle Linux" /etc/*-release; then DISTRO='Oracle' PM='yum' elif grep -Eqi "rockylinux" /etc/issue || grep -Eq "Rocky Linux" /etc/*-release; then DISTRO='Rocky' PM='yum' elif grep -Eqi "almalinux" /etc/issue || grep -Eq "AlmaLinux" /etc/*-release; then DISTRO='Alma' PM='yum' elif grep -Eqi "openEuler" /etc/issue || grep -Eq "openEuler" /etc/*-release; then DISTRO='openEuler' PM='yum' elif grep -Eqi "Anolis OS" /etc/issue || grep -Eq "Anolis OS" /etc/*-release; then DISTRO='Anolis' PM='yum' elif grep -Eqi "Kylin Linux Advanced Server" /etc/issue || grep -Eq "Kylin Linux Advanced Server" /etc/*-release; then DISTRO='Kylin' PM='yum' elif grep -Eqi "OpenCloudOS" /etc/issue || grep -Eq "OpenCloudOS" /etc/*-release; then DISTRO='OpenCloudOS' PM='yum' elif grep -Eqi "Huawei Cloud EulerOS" /etc/issue || grep -Eq "Huawei Cloud EulerOS" /etc/*-release; then DISTRO='HCE' PM='yum' elif grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; then DISTRO='CentOS' PM='yum' if grep -Eq "CentOS Stream" /etc/*-release; then isCentosStream='y' fi elif grep -Eqi "Red Hat Enterprise Linux" /etc/issue || grep -Eq "Red Hat Enterprise Linux" /etc/*-release; then DISTRO='RHEL' PM='yum' elif grep -Eqi "Ubuntu" /etc/issue || grep -Eq "Ubuntu" /etc/*-release; then DISTRO='Ubuntu' PM='apt' elif grep -Eqi "Raspbian" /etc/issue || grep -Eq "Raspbian" /etc/*-release; then DISTRO='Raspbian' PM='apt' elif grep -Eqi "Deepin" /etc/issue || grep -Eq "Deepin" /etc/*-release; then DISTRO='Deepin' PM='apt' elif grep -Eqi "Mint" /etc/issue || grep -Eq "Mint" /etc/*-release; then DISTRO='Mint' PM='apt' elif grep -Eqi "Kali" /etc/issue || grep -Eq "Kali" /etc/*-release; then DISTRO='Kali' PM='apt' elif grep -Eqi "Debian" /etc/issue || grep -Eq "Debian" /etc/*-release; then DISTRO='Debian' PM='apt' elif grep -Eqi "UnionTech OS|UOS" /etc/issue || grep -Eq "UnionTech OS|UOS" /etc/*-release; then DISTRO='UOS' if command -v apt >/dev/null 2>&1; then PM='apt' elif command -v yum >/dev/null 2>&1; then PM='yum' fi elif grep -Eqi "Kylin Linux Desktop" /etc/issue || grep -Eq "Kylin Linux Desktop" /etc/*-release; then DISTRO='Kylin' PM='apt' else DISTRO='unknow' fi Get_OS_Bit } Get_RHEL_Version() { Get_Dist_Name if [ "${DISTRO}" = "RHEL" ]; then if grep -Eqi "release 5." /etc/redhat-release; then echo "Current Version: RHEL Ver 5" RHEL_Ver='5' elif grep -Eqi "release 6." /etc/redhat-release; then echo "Current Version: RHEL Ver 6" RHEL_Ver='6' elif grep -Eqi "release 7." /etc/redhat-release; then echo "Current Version: RHEL Ver 7" RHEL_Ver='7' elif grep -Eqi "release 8." /etc/redhat-release; then echo "Current Version: RHEL Ver 8" RHEL_Ver='8' elif grep -Eqi "release 9." /etc/redhat-release; then echo "Current Version: RHEL Ver 9" RHEL_Ver='9' fi RHEL_Version="$(cat /etc/redhat-release | sed 's/.*release\ //' | sed 's/\ .*//')" fi } Get_OS_Bit() { if [[ `getconf WORD_BIT` = '32' && `getconf LONG_BIT` = '64' ]] ; then Is_64bit='y' ARCH='x86_64' DB_ARCH='x86_64' else Is_64bit='n' ARCH='i386' DB_ARCH='i686' fi if uname -m | grep -Eqi "arm|aarch64"; then Is_ARM='y' if uname -m | grep -Eqi "armv7|armv6"; then ARCH='armhf' elif uname -m | grep -Eqi "aarch64"; then ARCH='aarch64' DB_ARCH='aarch64' else ARCH='arm' fi fi } Get_Server_Type() { if [[ $(hostname) =~ "iZbp" ]] then SERVER_TYPE="aliyun" elif [[ $(hostname) =~ "lacew" ]] then SERVER_TYPE="aliyun" elif [[ $(hostname) =~ "VM-" ]] then SERVER_TYPE="qcloud" else SERVER_TYPE="unknown" fi } PressInstall() { InstallLog -I "按任意键开始安装,按Ctrl+C中止安装" local OLDCONFIG OLDCONFIG=$(stty -g) stty cbreak # dd if=/dev/tty bs=1 count=1 2> /dev/null stty -raw stty echo # stty -icanon -echo min 1 time 0 dd count=1 2>/dev/null stty "${OLDCONFIG}" } #检测端口 function CheckPort() { local port port=$1 InstallLog -I "检测端口 [$port]" local checkResult checkResult=$(netstat -tlpn | grep "\b$port\b") if [ -n "$checkResult" ]; then InstallLog -E "端口 $port 被占用" exit 1 fi } function CheckEmpty() { if [ -z "$1" ]; then InstallLog -E "$2" exit 1 fi } #检查API CheckAPI() { # shellcheck disable=SC1083 local code code=$(curl -I -m 5 -X POST -o /dev/null -s -w "%{http_code}" "$1") if [ "${code}" != 200 ]; then code=$(curl -I -m 5 -o /dev/null -s -w "%{http_code}" "$1&check") if [ "${code}" != 200 ]; then InstallLog -E "API $1 检查失败,返回代码 ${code}, 中止安装" exit else InstallLog -I "API $1 检查通过" fi else InstallLog -I "API $1 检查通过" fi } #更新repo源 function UpdateRepo() { Get_Dist_Name Get_Server_Type local install=0 InstallLog -I "修改 ${DISTRO} 镜像源,服务器类型 ${SERVER_TYPE}" if [ "${DISTRO}" == "Debian" ]; then #阿里云 if [[ ${SERVER_TYPE} == "aliyun" ]]; then if [ -f /etc/apt/sources.list ] && grep -Eqi "mirrors.cloud.aliyuncs.com" /etc/apt/sources.list; then InstallLog -i "Aliyun apt repo already installed, skip..." else InstallLog -i "Change /etc/apt/sources.list to mirrors.cloud.aliyuncs.com" sed -i "s#deb https\?://.*/debian#deb http://mirrors.cloud.aliyuncs.com/debian#" /etc/apt/sources.list sed -i "s/^deb-src/#deb-src/" /etc/apt/sources.list apt update fi #腾讯云 elif [[ ${SERVER_TYPE} == "qcloud" ]]; then if [ -f /etc/apt/sources.list ] && grep -Eqi "mirrors.tencentyun.com" /etc/apt/sources.list; then InstallLog -i "Tencent apt repo already installed, skip..." else InstallLog -i "Change /etc/apt/sources.list to mirrors.tencentyun.com" sed -i "s#deb https\?://.*/debian#deb http://mirrors.tencentyun.com/debian#" /etc/apt/sources.list sed -i "s/^deb-src/#deb-src/" /etc/apt/sources.list apt update fi fi elif [ "${DISTRO}" == "Ubuntu" ]; then #阿里云 if [[ ${SERVER_TYPE} == "aliyun" ]]; then if [ -f /etc/apt/sources.list ] && grep -Eqi "mirrors.cloud.aliyuncs.com" /etc/apt/sources.list; then InstallLog -i "Aliyun apt repo already installed, skip..." else InstallLog -i "Change /etc/apt/sources.list to mirrors.cloud.aliyuncs.com" sed -i "s#deb http\?://.*/ubuntu/#deb http://mirrors.cloud.aliyuncs.com/ubuntu/#" /etc/apt/sources.list sed -i "s/^deb-src/#deb-src/" /etc/apt/sources.list apt update fi #腾讯云 elif [[ ${SERVER_TYPE} == "qcloud" ]]; then if [ -f /etc/apt/sources.list ] && grep -Eqi "mirrors.tencentyun.com" /etc/apt/sources.list; then InstallLog -i "Tencent apt repo already installed, skip..." else InstallLog -i "Change /etc/apt/sources.list to mirrors.tencentyun.com" sed -i "s#deb https\?://.*/ubuntu#deb http://mirrors.tencentyun.com/ubuntu#" /etc/apt/sources.list sed -i "s/^deb-src/#deb-src/" /etc/apt/sources.list apt update fi fi elif [ "${DISTRO}" == "CentOS" ]; then #阿里云 if [[ ${SERVER_TYPE} == "aliyun" ]]; then if [ -f /etc/yum.repos.d/CentOS-Base.repo ] && grep -Eqi "mirrors.cloud.aliyuncs.com" /etc/yum.repos.d/CentOS-Base.repo; then InstallLog -i "Aliyun yum repo already installed, skip..." else # shellcheck disable=SC2004 install=$(($install + 1)) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.aliyuncs.com/repo/Centos-7.repo fi if [ -f /etc/yum.repos.d/ius.repo ] && grep -Eqi "mirrors.cloud.aliyuncs.com" /etc/yum.repos.d/ius.repo; then InstallLog -i "Aliyun ius repo already installed, skip..." else # shellcheck disable=SC2004 install=$(($install + 1)) yum install -y http://mirrors.cloud.aliyuncs.com/ius/ius-release-el7.rpm sed -i 's|baseurl.*/ius|baseurl=http://mirrors.cloud.aliyuncs.com/ius|g' /etc/yum.repos.d/ius* rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 fi if [ -f /etc/yum.repos.d/epel.repo ] && grep -Eqi "mirrors.cloud.aliyuncs.com" /etc/yum.repos.d/epel.repo; then InstallLog -i "Aliyun epel repo already installed, skip..." else # shellcheck disable=SC2004 install=$(($install + 1)) wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.aliyuncs.com/repo/epel-7.repo sed -i 's|#\?baseurl.*/epel|baseurl=http://mirrors.cloud.aliyuncs.com/epel|' /etc/yum.repos.d/epel* fi elif [[ ${SERVER_TYPE} == "qcloud" ]]; then #腾讯云 if [ -f /etc/yum.repos.d/CentOS-Base.repo ] && grep -Eqi "mirrors.cloud.tencent.com" /etc/yum.repos.d/CentOS-Base.repo; then InstallLog -i "Tencent yum repo already installed, skip..." else # shellcheck disable=SC2004 install=$(($install + 1)) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo fi if [ -f /etc/yum.repos.d/ius.repo ] && grep -Eqi "mirrors.cloud.tencent.com" /etc/yum.repos.d/ius.repo; then InstallLog -i "Tencent ius repo already installed, skip..." else # shellcheck disable=SC2004 install=$(($install + 1)) yum install -y https://mirrors.cloud.tencent.com/ius/ius-release-el7.rpm rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 sed -i 's|baseurl.*/ius|baseurl=http://mirrors.cloud.tencent.com/ius|g' /etc/yum.repos.d/ius* fi if [ -f /etc/yum.repos.d/epel.repo ] && grep -Eqi "mirrors.cloud.tencent.com" /etc/yum.repos.d/epel.repo; then InstallLog -i "Tencent epel repo already installed, skip..." else # shellcheck disable=SC2004 install=$(($install + 1)) wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo sed -i 's|baseurl.*/epel|baseurl=http://mirrors.cloud.tencent.com/epel|g' /etc/yum.repos.d/epel* fi elif [[ ${SERVER_TYPE} == "unknown" ]]; then InstallLog -e "服务器类型不支持" exit fi if [ "$install" -gt 0 ]; then if [ "$PM" == "yum" ];then yum clean all yum makecache fi fi fi } function InstallNecessary() { Get_Dist_Name Get_Server_Type InstallLog -I "安装必要支持软件" ${PM} install -y ca-certificates &> /dev/null if ! command -v wget >/dev/null; then InstallLog -I "安装wget" ${PM} install -y wget &> /dev/null fi if ! command -v curl >/dev/null; then InstallLog -I "安装curl" ${PM} install -y curl &> /dev/null fi if ! command -v netstat >/dev/null; then InstallLog -I "安装net-tools" ${PM} install -y net-tools &> /dev/null fi if ! command -v screen >/dev/null; then InstallLog -I "安装screen" ${PM} install -y screen &> /dev/null fi if ! command -v vim >/dev/null; then InstallLog -I "安装vi" ${PM} install -y vim &> /dev/null fi echo 'set mouse=""' >> ~/.vimrc if ! command -v gpg >/dev/null; then InstallLog -I "安装gnupg" ${PM} install -y gnupg &> /dev/null fi if ! command -v git >/dev/null; then InstallLog -I "安装git" if [ "${DISTRO}" == "Debian" ] || [ "${DISTRO}" == "Ubuntu" ]; then ${PM} install -y git &> /dev/null elif [ "${DISTRO}" == "CentOS" ]; then ${PM} install -y git236 &> /dev/null fi fi if ! command -v rz >/dev/null; then InstallLog -I "安装lrzsz" ${PM} install -y lrzsz &> /dev/null fi if ! command -v docker >/dev/null; then InstallLog -I "安装docker和docker-compose" if [ "${DISTRO}" == "Debian" ]; then if [[ ${SERVER_TYPE} == "aliyun" ]]; then curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/debian/gpg | gpg --yes --dearmor -o /usr/share/keyrings/aliyun-docker-ce-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/aliyun-docker-ce-keyring.gpg] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/debian/ \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/aliyun-docker-ce.list > /dev/null elif [[ ${SERVER_TYPE} == "qcloud" ]]; then curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg | gpg --yes --dearmor -o /usr/share/keyrings/aliyun-docker-ce-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/aliyun-docker-ce-keyring.gpg] http://mirrors.aliyun.com/docker-ce/linux/debian/ \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/aliyun-docker-ce.list > /dev/null elif [[ ${SERVER_TYPE} == "unknown" ]]; then InstallLog -e "服务器类型不支持" exit fi apt update apt install -y docker-ce docker-ce-cli containerd.io elif [ "${DISTRO}" == "Ubuntu" ]; then if [[ ${SERVER_TYPE} == "aliyun" ]]; then curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg | gpg --yes --dearmor -o /usr/share/keyrings/aliyun-docker-ce-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/aliyun-docker-ce-keyring.gpg] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/ \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/aliyun-docker-ce.list > /dev/null elif [[ ${SERVER_TYPE} == "qcloud" ]]; then curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --yes --dearmor -o /usr/share/keyrings/aliyun-docker-ce-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/aliyun-docker-ce-keyring.gpg] http://mirrors.aliyun.com/docker-ce/linux/ubuntu/ \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/aliyun-docker-ce.list > /dev/null elif [[ ${SERVER_TYPE} == "unknown" ]]; then InstallLog -e "服务器类型不支持" exit fi apt update apt install -y docker-ce docker-ce-cli containerd.io elif [ "${DISTRO}" == "CentOS" ]; then yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #yum list docker-ce --showduplicates | sort -r yum -y install docker-ce-26.1.4-1.el7 &> /dev/null fi if [ ! -f /usr/bin/docker-compose ];then wget -O /usr/bin/docker-compose http://mi.lacecdn.com/docker/docker-compose-linux-x86_64-v2.32.4 chmod +x /usr/bin/docker-compose fi systemctl enable docker systemctl start docker apt upgrade fi } #克隆代码 function CloneCode() { InstallLog -I "克隆代码..." if [ -d ${LACEMI_CODE_PROD_PATH} ]; then InstallLog -E "安装目录 ${LACEMI_CODE_PROD_PATH} 已存在,中止安装..." exit fi if [ -d /tmp/lacemi ]; then rm -rf /tmp/lacemi fi git clone "${LACEMI_CODE_URL}" /tmp/lacemi InstallLog -I "复制代码至目录 ${LACEMI_CODE_PROD_PATH} " mv -f /tmp/lacemi "${LACEMI_CODE_PROD_PATH}" chmod 777 -R "${LACEMI_CODE_PROD_PATH}/sapi/runtime" chmod 777 -R "${LACEMI_CODE_PROD_PATH}/sapi/web" } function CloneShareCode() { InstallLog -I "克隆共享版代码..." if [ -d ${LACEMI_CODE_SHARE_PATH} ]; then InstallLog -E "安装目录 ${LACEMI_CODE_SHARE_PATH} 已存在,中止安装..." exit fi if [ -d /tmp/lacemi ]; then rm -rf /tmp/lacemi fi git clone "${LACEMI_SHARE_CODE_URL}" /tmp/lacemi InstallLog -I "复制代码至目录 ${LACEMI_CODE_SHARE_PATH} " mv -f /tmp/lacemi "${LACEMI_CODE_SHARE_PATH}" chmod 777 -R "${LACEMI_CODE_SHARE_PATH}/sapi/runtime" chmod 777 -R "${LACEMI_CODE_SHARE_PATH}/sapi/web" } function SecuritySSHLogin() { if [ -s /root/.ssh/authorized_keys ]; then InstallLog -I "成功禁用密码登录" chattr -i /etc/ssh/sshd_config sed -i "s/#\+PasswordAuthentication \w\+/PasswordAuthentication no/g" /etc/ssh/sshd_config systemctl restart sshd else InstallLog -W "由于未启用SSH公钥登录,不允许禁用密码登录" fi iFlag=$(lsattr /etc/ssh/sshd_config | cut -d "-" -f 5) if [ "$iFlag" != "i" ]; then chattr +i /etc/ssh/sshd_config fi iFlag=$(lsattr /root/.ssh/authorized_keys | cut -d "-" -f 5) if [ "$iFlag" != "i" ]; then chattr +i /root/.ssh/authorized_keys fi grep 'PasswordAuthentication ' /etc/ssh/sshd_config } #下载公钥并允许公钥登录 function EnableSSHLogin() { InstallLog -I "允许SSH登陆" CheckEmpty "${LACEMI_KEY}" "安装密钥为空,安装中止" local rsaPublicKey rsaPublicKey=$(curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-pub\",\"key\":\"${LACEMI_KEY}\"}") InstallLog -E "$rsaPublicKey" # rsaPublicKey=$(curl -s -H "Accept:text/html" "${getPubApi}") if [ -z "${rsaPublicKey}" ]; then InstallLog -E "无法获取公钥,安装中止" exit 1 fi # shellcheck disable=SC2046 if [ $(echo "${rsaPublicKey}" | grep -c 'ssh-rsa') -eq 0 ]; then InstallLog -E "公钥格式不正确,安装中止" exit 1 fi local checkString="${rsaPublicKey:50:36}" InstallLog -I "检查公钥字符串 ${checkString}" # shellcheck disable=SC2046 if [ $(grep -c "${checkString}" /root/.ssh/authorized_keys) -gt 0 ]; then InstallLog -W "公钥已存在,跳过" else InstallLog -I "公钥不存在,附加" chattr -i /root/.ssh/authorized_keys cat >>/root/.ssh/authorized_keys <>/var/spool/cron/root } Get_Dist_Name if [ "${DISTRO}" = "unknow" ]; then Echo_Red "Unable to get Linux distribution name, or do NOT support the current distribution." exit 1 fi ################ VERSION="v3.1.0" RELEASE="2025-03-18" SEED=$(date +%Y%m%d%H%M%S) LACEMI_API_VERSION="v32" LACEMI_METHOD="install" LACEMI_CODE_DEV_PATH="/home/lacemi_api_dev_${LACEMI_API_VERSION}" LACEMI_CODE_SHARE_PATH="/home/lacemi_api_share_${LACEMI_API_VERSION}" LACEMI_CODE_PROD_PATH="/home/lacemi_api_prod_${LACEMI_API_VERSION}" LACEMI_API="https://api.hlace.com/v1/install" LACEMI_SHARE_CODE_URL="https://gogs.hlace.com/centrenda/lacemi_share_${LACEMI_API_VERSION}.git" LACEMI_DEV_CODE_URL="https://gogs.hlace.com/centrenda/lacemi_dev_${LACEMI_API_VERSION}.git" LACEMI_CODE_URL="https://gogs.hlace.com/centrenda/lacemi_${LACEMI_API_VERSION}.git" LACEMI_QUIET="0" LACEMI_DOMAIN="" LACEMI_DOMAIN_NAME="" LACEMI_KEY="" ################ start_date=$(date +'%Y-%m-%d %H:%M:%S') step=0 steps=12 VERSION_POSTGRESQL="17.4.0" VERSION_MARIADB="11.6.2" VERSION_MONGODB="8.0.5" VERSION_NGINX="1.27.4" VERSION_REDIS="7.4.2" VERSION_PHP="8.1.31" Usage() { cat <