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 [email protected]:/abc /def

Was mache ich falsch?

Beachten Sie bitte:

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

Dor
quelle
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://[email protected]:/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.

brm
quelle
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 [email protected]:/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.

Graeme
quelle
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!

Eddie
quelle
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.

Arunas Bartisius
quelle
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