【发布时间】:2018-03-29 23:40:27
【问题描述】:
到目前为止,我有这个,但我错过了一些事情,比如让 cron 作业编写脚本。不想以 root 身份执行此操作。所以我假设可以做更多的工作来同时设置第一个用户。该脚本需要是幂等的(如果之前使用相同的参数运行,则可以一遍又一遍地运行而不会冒险更改任何内容)。
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 user@mydomain.com admin@mydomain.com 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?
-
看起来不错,问题出在哪里?
-
除了 here-doc 中缺少
fi之外,看起来不错。也许与您对"$1"的 dbl 引用一致?为了真正防弹,也许添加一些 dbl 检查每个步骤是否有效。您可以将所有apt-gets 与&&s 链接在一起(实际上是所有步骤)(是的,疯狂)和/或检查日志文件是否确实发生了事情,或者捕获 Std-err 并确保它是空的等。或者您可以从事物的“完成端”查看它并添加一个测试来证明您的“带有 SSL 的 nginx 实例”正在按要求工作。 (以上所有有效问题)。祝你好运! -
您的 Q 不“只是”如何添加自动 cron 条目是吗?更多的是不以root身份运行,对吗?只要系统的 cron 允许通过
crontab <myCrontab进行非 root 访问(管理员可以通过多种安全功能阻止),看起来你就可以开始了。推翻在您的服务器上设置的任何故意的 crontab 安全功能将需要至少一次 root 访问或其他管理员干预(至少在我工作过的行业中)。 :-) 。祝你好运。
标签: bash ssl nginx ssh certbot