Ich muss ausführen rsync
, ohne dass ich nach dem Passwort gefragt werde.
Ich habe in der rsync
Manpage gesehen, dass es nicht erlaubt, das Passwort als Kommandozeilenargument anzugeben.
Mir ist aber aufgefallen, dass es erlaubt, das Passwort über die Variable anzugeben RSYNC_PASSWORD
.
Also habe ich versucht, die Variable zu exportieren, aber rsync
immer wieder nach dem Passwort gefragt.
export RSYNC_PASSWORD="abcdef"
rsync [email protected]:/abc /def
Was mache ich falsch?
Beachten Sie bitte:
- Ich verstehe, dass dies aus Sicherheitsgründen eine schlechte Idee ist
- Ich muss nur verwenden
rsync
, kann keine andere Software verwenden - Ich kann keine schlüsselbasierte Authentifizierung verwenden
- Ich habe gelesen , schon viele SE Frage, zum Beispiel:
How-to-pass-Passwort-for-rsync-ssh-Befehl @ stackoverflow.com
rsync-cron-job-mit-einem-Passwort @ superuser.com
how-to-setup -rsync-without-password-with-ssh-on-unix-linux @ superuser.com
Mit anderen Worten, ich muss den RSYNC_PASSWORD
Ansatz funktionieren lassen! :-)
Antworten:
Diese Kennwortumgebungsvariable scheint nur bei Verwendung des rsync-Protokolls verwendet zu werden:
Damit dies funktioniert, müssen Sie rsync auch als Daemon ausführen (
--daemon
Option), was häufig mithilfe von ausgeführt wirdinetd.conf
.Sollte bei Verwendung dieses Protokolls
abc
einem in definierten Ziel entsprechen/etc/rsyncd.conf
. Der Benutzername sollte in einerauth users
Zeile für dieses Ziel vorhanden sein, und eine Kennwortdatei sollte mit dersecrets file
Option angegeben werden.Diese geheime Datei enthält Zuordnungen zwischen Benutzernamen und Kennwörtern im folgenden Format:
Und dieses Kennwort können Sie mit der Umgebungsvariablen RSYNC_PASSWORD angeben.
quelle
Wenn der
rsync
Dämon nicht auf dem Zielcomputer ausgeführt wird und es Ihnen egal ist, Passwörter für alle Benutzer auf dem lokalen Computer bereitzustellen ( Warum sollte niemand Passwörter in der Befehlszeile verwenden? ), Können Sie Folgendes verwendensshpass
:Beachten Sie das Leerzeichen am Anfang des Befehls. In der
bash
Shell wird dadurch verhindert, dass der Befehl (und das Kennwort) im Verlauf gespeichert werden. Ich empfehle nicht, dieRSYNC_PASSWORD
Variable zu verwenden, es sei denn, dies ist unbedingt erforderlich (gemäß einer vorherigen Bearbeitung dieser Antwort). Ich empfehle, den Verlaufsspeicher zu unterdrücken oder zumindest den Verlauf danach zu löschen. Außerdem können Sie damittput reset
den Terminalverlauf löschen.quelle
sshpass -p $(cat passFile) ..
um einen klaren Pass in der Bash-Geschichte zu verbergen, und chmod 400 auf passFile, um ihn zu sichern-p "$RSYNC_PASSWORD"
Sie können Standard-SSH-Identitäten verwenden, um sich ohne Passwort anzumelden. Dies wird standardmäßig behandelt, wenn Sie über einen
~/.ssh/id_rsa
oder einen ähnlichen Schlüssel verfügen. Sie können jedoch auch Ihren eigenen Pfad zum privaten Schlüssel eines autorisierten Schlüsselpaars fest codieren.Dies ermöglicht das Batching / Scripting, ohne dass Kennwörter verfügbar gemacht werden müssen, und der öffentliche Schlüssel kann vom Zielserver entfernt werden, falls der private Schlüssel jemals kompromittiert wird.
Sie können auch Argumente hinzufügen
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
, um die Überprüfung des Remotehostschlüssels nicht zu erzwingen. ! Achtung - das öffnet Mann in der Mitte Angriffe und ist allgemeine schlechte Praxis!quelle
~/.ssh
Ordner in der Shell verwendet wurde (in dem sich Rsync befindet). Sobald ich -e verwendet habe, um auf den inneren Schlüssel zu zeigen/mnt/c/Users/MyUsername/.ssh
, hat es wie erwartet funktioniert. (Danke.: D)Sehr nützlich für die Skripterstellung ist die Verwendung der
--password-file
Befehlszeilenoption.chmod 600 rsync_pass
rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory
Dies kann für die Skripterstellung verwendet werden und bietet mehr Sicherheit als nur das Exportieren des Kennworts in eine Systemvariable.
quelle