은 (https://hostcloak.com)이 어떻게 bash는 스크립트의 nginx/PHP를 통해 실행할 수 있도록 내 목표는 자동으로 내 CDN 서비스에 자신의 사이트를 추가 할 사람들을위한 SSL 인증서에서 생성하는 방법을 확인하는 것입니다
다음는 스크립트입니다 내가하려고하지만 경우에, 직접 ssh를 콘솔을 통해 사용하는 경우
이#!/bin/bash
domain=$1
# Set up config file.
cat > /etc/nginx/sites/$domain.conf <<EOF
server {
listen 80;
server_name *.$domain;
root /var/www/$domain;
}
EOF
nginx -s reload
#########################################
set -o nounset
set -o errexit
mkdir -p /var/www/$domain
# Set up config file.
mkdir -p /etc/letsencrypt
cat > /etc/letsencrypt/cli.ini <<EOF
# Uncomment to use the staging/testing server - avoids rate limiting.
# server = https://acme-staging.api.letsencrypt.org/directory
# Use a 4096 bit RSA key instead of 2048.
rsa-key-size = 4096
# Set email and domains.
email = [email protected]
domains = $domain
# Text interface.
text = True
# No prompts.
non-interactive = True
# Suppress the Terms of Service agreement interaction.
agree-tos = True
# Use the webroot authenticator.
authenticator = webroot
webroot-path = /var/www/$domain
EOF
# Obtain cert.
certbot-auto certonly
# Set up daily cron job.
CRON_SCRIPT="/etc/cron.daily/certbot-renew"
cat > "${CRON_SCRIPT}" <<EOF
#!/bin/bash
#
# Renew the Let's Encrypt certificate if it is time. It won't do anything if
# not.
#
# This reads the standard /etc/letsencrypt/cli.ini.
#
# May or may not have HOME set, and this drops stuff into ~/.local.
export HOME="/root"
# PATH is never what you want it it to be in cron.
export PATH="\${PATH}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
certbot-auto --no-self-upgrade certonly
# If the cert updated, we need to update the services using it. E.g.:
if service --status-all | grep -Fq 'apache2'; then
service apache2 reload
fi
if service --status-all | grep -Fq 'httpd'; then
service httpd reload
fi
if service --status-all | grep -Fq 'nginx'; then
service nginx reload
fi
EOF
chmod a+x "${CRON_SCRIPT}"
#####################################
# Set up config file.
cat > /etc/nginx/sites/$domain.conf <<EOF
server {
listen 80;
server_name *.$domain;
location/{
proxy_set_header x-real-IP \$remote_addr;
proxy_set_header x-forwarded-for \$proxy_add_x_forwarded_for;
proxy_set_header host \$host;
proxy_pass http://google.com;
}
}
server {
listen 443;
server_name *.$domain;
ssl_certificate /etc/letsencrypt/live/$domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$domain/privkey.pem;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
location/{
proxy_set_header x-real_IP \$remote_addr;
proxy_set_header x-forwarded-for \$proxy_add_x_forwarded_for;
proxy_set_header host \$host;
proxy_pass http://google.com;
}
}
EOF
nginx -s reload
"autossl는"작동합니다 SSH를 통해 작동하지만 내가 PHP 여기
exec("sudo sh /var/autossl $domain 2>&1", $output);
를 통해 그것을 실행하려고 할 때하면 bash는 스크립트입니다 PHP의 간부 인 기능을 통해, 그것은 "의 nginx -s 다시로드"를 "명령을 찾을 수 없습니다"라는
그래서 내 질문은 : 나는
시도해 보았지만 이것을 얻었습니다 : Array ([0]/usr/local/bin/autossl : 행 6 : /etc/nginx/sites/yoyyo.com.conf : 권한 거부 [1] =>/usr/local/bin/autossl : 줄 14 : nginx : 명령 안함 root 권한으로/usr/local/bin/certbot-auto를 다시 실행하라는 요청을 받았습니다. [3] => [4] => 우리는 당신이 로컬 시스템 [5] => 관리자. 일반적으로 다음 세 가지로 귀결됩니다 : [6] => [7] => # 1) 다른 사람들의 프라이버시를 존중하십시오. [8] => # 2) 입력하기 전에 생각하십시오. [9] => # 3) 위대한 힘으로 위대한 책임을지게됩니다. [10] => [11] => sudo : 아무런 tty가 없습니다. – John
php/nginx는 php/nginx 경로에 nginx 명령이 없으므로 사용자가 두 번째로 다른 권한을 가지고 있기 때문에 첫 번째 오류 일 가능성이 큽니다. bash –
php/nginx bash 경로에 어떻게 추가합니까? – John