Wie kann ich rsync ohne Aufforderung zur Kennworteingabe ausführen, ohne die Authentifizierung mit öffentlichem Schlüssel zu verwenden?


44

Ich muss ausführen rsync, ohne dass ich nach dem Passwort gefragt werde.

Ich habe in der rsyncManpage 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 rsyncimmer wieder nach dem Passwort gefragt.

export RSYNC_PASSWORD="abcdef"
rsync root@1.2.3.4:/abc /def

Was mache ich falsch?

Beachten Sie bitte:

Mit anderen Worten, ich muss den RSYNC_PASSWORDAnsatz funktionieren lassen! :-)


Haben Sie den rsync-Daemon auf dem Remote-Server aktiviert?
Rahul Patil

Antworten:


13

Diese Kennwortumgebungsvariable scheint nur bei Verwendung des rsync-Protokolls verwendet zu werden:

rsync rsync://username@1.2.3.4:/abc /def

Damit dies funktioniert, müssen Sie rsync auch als Daemon ausführen ( --daemonOption), was häufig mithilfe von ausgeführt wird inetd.conf.

Sollte bei Verwendung dieses Protokolls abceinem in definierten Ziel entsprechen /etc/rsyncd.conf. Der Benutzername sollte in einer auth usersZeile für dieses Ziel vorhanden sein, und eine Kennwortdatei sollte mit der secrets fileOption angegeben werden.

Diese geheime Datei enthält Zuordnungen zwischen Benutzernamen und Kennwörtern im folgenden Format:

username:password

Und dieses Kennwort können Sie mit der Umgebungsvariablen RSYNC_PASSWORD angeben.


Ein schneller Weg, um einen Rsync-Server auszuführen, ist mit https://s3.amazonaws.com/skaperen/rsend
Skaperen

65

Wenn der rsyncDä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 verwenden sshpass:

 sshpass -p "password" rsync root@1.2.3.4:/abc /def

Beachten Sie das Leerzeichen am Anfang des Befehls. In der bashShell wird dadurch verhindert, dass der Befehl (und das Kennwort) im Verlauf gespeichert werden. Ich empfehle nicht, die RSYNC_PASSWORDVariable 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 damit tput resetden Terminalverlauf löschen.


2
Warum würden Sie vorschlagen, einem Befehl Passwort-Klartext hinzuzufügen, das ist schlecht Linux-Administrator 101.
Eddie

Super praktisch ... habe eine Weile nach einem Ansatz dafür gesucht. Danke.
Isaac Gregson

6
Es ist zwar schlecht, das Kennwort als Klartext hinzuzufügen, dies ist jedoch derzeit die einzige einigermaßen einfache Möglichkeit, dies zu tun.
Weston Ganger

15
Sie können immer so etwas tun: sshpass -p $(cat passFile) ..um einen klaren Pass in der Bash-Geschichte zu verbergen, und chmod 400 auf passFile, um ihn zu sichern
Kresimir Pendic

3
Ich weiß, dass dies alt ist, aber für neuere Leser geben Sie bitte das Passwort an - Passwörter können Sonderzeichen und Leerzeichen enthalten. -p "$RSYNC_PASSWORD"
Paddy Landau

16

Sie können Standard-SSH-Identitäten verwenden, um sich ohne Passwort anzumelden. Dies wird standardmäßig behandelt, wenn Sie über einen ~/.ssh/id_rsaoder 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.

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/

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!


1
Dies ist besonders nützlich, wenn Sie die neue Bash-Shell für Windows 10 verwenden. Ich habe mich gefragt, warum rsync nicht passwortfrei funktioniert hat. Ich erkannte, dass der ~/.sshOrdner 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)
Toby Deshane

12

Sehr nützlich für die Skripterstellung ist die Verwendung der --password-fileBefehlszeilenoption.

  • Erstellen Sie eine leere Datei mit dem Namen rsync_pass
  • Schreibe ein Passwort in diese Datei (nichts weiter)
  • 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.


4
Hinweis für den Leser: Dies erfordert auch einen rsync-Daemon, der auf dem Server ausgeführt wird. Ich hatte wirklich gehofft, dass SSH-Schlüssel für passwortloses Rsync ausreichen würden.
Sridhar Sarnobat

IMHO ist dies der einzig richtige Weg, um es zu tun, wenn man ssh nicht verwenden möchte.
maxf130

Diese Antwort macht am meisten Sinn
AJ Meyghani
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.