Ausgabe von Anführungszeichen und Variablen

Ausgabe von Anführungszeichen und Variablen

Ich schreibe ein Skript zur Automatisierung von Let’s Encrypt in PowerDNS (dies ist ein einfaches Bash-Shell-Skript, das unter Debian ausgeführt werden kann).

Certbot wird ausgeführt, ruft das Skript auf und gibt ihm die Variable $CERTBOT_VALIDATION.

Ich habe bereits einen Thread gelesenHierDies zeigt die Notwendigkeit von '"content"'– beachten Sie die einfachen  'und doppelten  Anführungszeichen ". (Ich habe dies in einer anderen Iteration des Codes vergeblich versucht.) Ich habe Probleme, die erweiterte Variable in Anführungszeichen auszugeben. Hier ist eine Möglichkeit, die ich versucht habe:

pdnsutil add-record Example.com _acme-challenge txt 120 "\"%s\""  "$CERTBOT_VALIDATION"

Um das jedoch von Bash aus auszugeben, muss ich \vor dem ein hinzufügen ".

Ich möchte, dass der Ausgabebefehl wie folgt lautet:

 pdnsutil add-record Example.com _acme-challenge txt 120 "content"

Wie lässt sich dies am besten bewerkstelligen?

Was auch immer derzeit ausgegeben wird, verursacht einen Fehler mit:

Error: Parsing record content (try 'pdnsutil check-zone'): Data field in DNS should start with quote (") at position 0 of ''yXtgt_2vlnrF7j2V-eTJZuSjXbswsGN97TQ0Zp3IynM''

Antwort1

ich werde für alle, die in Zukunft darauf stoßen, ein Update als mögliche Antwort bereitstellen.

beim Ausführen des Certbot-Befehls:

certbot certonly --manual --preferred-challenges=dns --manual-auth-hook /etc/letsencrypt/customScripts/authenticator.sh -d *.example.com --dry-run

Das Skript authenticator.sh lautet jetzt:

#!/bin/bash
new='"'
new2=$new$CERTBOT_VALIDATION$new
pdnsutil add-record example.com _acme-challenge txt 120 $new2
echo $new2 > output.log
# Sleep to make sure the change has time to propagate over to DNS
sleep 25

Dies funktioniert, indem die Variablen als Zeichenfolgen verknüpft werden, um die Anführungszeichen hinzuzufügen. output.log zeigt, dass die Variable

cat output.log 
"RipQQbHO5pG95nzJjouCgTXJMrGTbLKQ5XsV5Zgn7uI"

und Certbot meldet:

certbot certonly --manual --preferred-challenges=dns --manual-auth-hook /etc/letsencrypt/customScripts/authenticator.sh -d *.example.com --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for example.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
Output from authenticator.sh:
RipQQbHO5pG95nzJjouCgTXJMrGTbLKQ5XsV5Zgn7uI
New rrset:
_acme-challenge.example.com. IN TXT 120 "RipQQbHO5pG95nzJjouCgTXJMrGTbLKQ5XsV5Zgn7uI"

Error output from authenticator.sh:
Apr 05 10:51:41 Reading random entropy from '/dev/urandom'
Apr 05 10:51:41 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
Apr 05 10:51:41 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.

Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - The dry run was successful.

das scheint also die Lösung zu sein.

verwandte Informationen