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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
| #!/bin/bash
if [[ $# -eq 0 ]]; then echo "错误:请提供域名作为参数" echo "用法:$0 <域名>" exit 1 fi
DOMAIN=$1
EMAIL="填写自己的邮箱"
SSL_DIR="$HOME/ssl" KEY_FILE="$SSL_DIR/$DOMAIN.key" CERT_FILE="$SSL_DIR/$DOMAIN.pem"
get_pmt(){ if ! res=$(which yum 2>/dev/null); then if ! res=$(which apt 2>/dev/null); then echo "不支持的Linux系统" echo "只支持的包管理器为apt或yum的Linux系统" exit 1 fi PMT="apt" CMD_INSTALL="apt install -y " CMD_REMOVE="apt remove -y " CMD_UPGRADE="apt update; apt upgrade -y; apt autoremove -y" else PMT="yum" CMD_INSTALL="yum install -y " CMD_REMOVE="yum remove -y " CMD_UPGRADE="yum update -y" fi if ! res=$(which systemctl 2>/dev/null); then echo "系统版本过低,请升级到最新版本" exit 1 fi }
install(){ get_pmt echo "检查证书申请相关依赖..."
if ! command -v socat &> /dev/null; then echo "socat 未安装,正在安装..." $CMD_INSTALL socat fi
if ! command -v openssl &> /dev/null; then echo "openssl 未安装,正在安装..." $CMD_INSTALL openssl fi
if [[ $PMT = "yum" ]]; then if ! rpm -q cronie &> /dev/null; then echo "cronie 未安装,正在安装..." $CMD_INSTALL cronie systemctl start crond systemctl enable crond fi else if ! dpkg -l | grep -q '^ii.*cron\s'; then echo "cron 未安装,正在安装..." $CMD_INSTALL cron systemctl start cron systemctl enable cron fi fi }
main(){ if [[ ! -d $SSL_DIR ]]; then echo "创建证书目录: $SSL_DIR" mkdir -p "$SSL_DIR" || { colorEcho $RED " 无法创建目录: $SSL_DIR" exit 1 } chmod 700 "$SSL_DIR" fi
curl -sL https://get.acme.sh | sh -s email=$EMAIL source ~/.bashrc
~/.acme.sh/acme.sh --upgrade --auto-upgrade ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
~/.acme.sh/acme.sh --issue -d $DOMAIN --keylength ec-256 \ --pre-hook "systemctl stop nginx" \ --post-hook "systemctl restart nginx" \ --standalone --insecure
if [[ ! -f ~/.acme.sh/${DOMAIN}_ecc/ca.cer ]]; then echo "证书申请失败,请添加域名解析记录或等待DNS同步,稍后再试"。 exit 1 fi
~/.acme.sh/acme.sh --install-cert -d $DOMAIN --ecc \ --key-file $KEY_FILE \ --fullchain-file $CERT_FILE \ --reloadcmd "systemctl restart nginx"
if [[ ! ( -f $CERT_FILE && -f $KEY_FILE) ]]; then echo "证书安装失败" exit 1 else echo "证书申请成功" echo $KEY_FILE echo $CERT_FILE fi }
install main
|