我有這個到目前爲止,但我錯過了幾個像獲取cron作業腳本的東西。不想以root身份執行此操作。所以我假設可以做更多的事情來同時設置第一個用戶。該腳本需要是冪等的(如果以前使用相同的參數運行,可以反覆運行而不會冒險改變任何內容)。在新的Ubuntu 16.04服務器上用SSL編寫新的nginx實例的正確方法是什麼?
singledomaincertnginx.sh:
#!/bin/bash
if [ -z "$3" ]; then
echo use is "singledomaincertnginx.sh <server-ssh-address> <ssl-admin-email> <ssl-domain>"
echo example: "singledomaincertnginx.sh [email protected] [email protected] some-sub-domain.mydomain.com"
exit
fi
ssh $1 "cat > ~/wks" << 'EOF'
#!/bin/bash
echo email: $1
echo domain: $2
sudo add-apt-repository -y ppa:certbot/certbot
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y software-properties-common
sudo apt-get install -y python-certbot-nginx
sudo apt-get install -y nginx
sudo sed -i "s/server_name .*;/server_name $2;/" /etc/nginx/sites-available/default
sudo systemctl restart nginx.service
if [[ -e /etc/letsencrypt/live/$2/fullchain.pem ]]; then
sudo certbot -n --nginx --agree-tos -m "$1" -d "$2"
fi
if [[ ! sudo crontab -l | grep certbot ]]; then
# todo: add cron job to renew: 15 3 * * * /usr/bin/certbot renew --quiet
EOF
ssh $1 "chmod +x ~/wks"
ssh -t $1 "bash -x -e ~/wks $2 $3"
爲什麼不使用Ansible? –
看起來不錯,問題在哪裏? – aggsol
除了在here-doc裏面缺少'fi'外,看起來不錯。也許和你的''$ 1'''dbl-quoting一致?要真正防患於未然,可能需要添加一些dbl-檢查每個步驟的工作。你可以將所有'apt-get's和'&&'s(實際上所有的步驟)(是的,瘋狂的)和/或檢查日誌文件確實發生,或者捕獲Std-err並確保它是空的等等,或者你可以從事情的「完成的結局」來看它,並添加一個測試來證明你的「使用SSL的nginx實例」按需要工作。 (以上所有有效Q值)。祝你好運! – shellter