Wie verwendet man eine Identitätsdatei mit rsync?

125

Wie verwendet man eine Identitätsdatei mit rsync?

Dies ist die Syntax , die ich mit rsync verwenden sollte, um eine Identitätsdatei für die Verbindung zu verwenden:

rsync -avz -e 'ssh -p1234 -i ~ / .ssh / 1234-identity' \
"/ local / dir /" [email protected]: "/ remote / dir /"

Aber es gibt mir einen Fehler:

Warnung: Identitätsdatei ~ / .ssh / 1234-Identität nicht zugänglich: Keine solche Datei oder kein solches Verzeichnis.

Die Datei ist in Ordnung, die Berechtigungen sind korrekt eingestellt, es funktioniert, wenn ssh ausgeführt wird - nur nicht mit rsync - zumindest in meiner Syntax. Was mache ich falsch? Versucht es, auf dem Remotecomputer nach der Identitätsdatei zu suchen? Wenn ja, wie gebe ich an, dass ich eine Identitätsdatei auf meinem lokalen Computer verwenden möchte ?

cwd
quelle

Antworten:

86

Möglicherweise möchten Sie den Schlüssel verwenden ssh-agentund ssh-addin den Speicher laden. sshwird Identitäten von ssh-agent automatisch versuchen, wenn es sie finden kann. Befehle wären

eval $(ssh-agent) # Create agent and environment variables
ssh-add ~/.ssh/1234-identity

ssh-agentist ein Benutzerdämon, der unverschlüsselte SSH-Schlüssel im Speicher hält. ssh findet es basierend auf Umgebungsvariablen, die ssh-agent beim Ausführen ausgibt. Durch evalAuswerten dieser Ausgabe werden die Umgebungsvariablen erstellt. ssh-addist der Befehl, der den Schlüsselspeicher verwaltet. Der Agent kann mit ssh-add gesperrt werden. Eine Standardlebensdauer für einen Schlüssel kann angegeben werden, wenn ssh-agent gestartet wird, oder für einen Schlüssel, wenn er hinzugefügt wird.

Möglicherweise möchten Sie auch eine ~ / .ssh / config-Datei einrichten, um die Port- und Schlüsseldefinition bereitzustellen. (Weitere Optionen finden Sie unter `man ssh_config.)

host 22.33.44.55
    IdentityFile ~/.ssh/1234-identity
    Port 1234

Durch einfaches Anführen des Befehls ssh wird die für ~oder erforderliche Shell-Erweiterung verhindert $HOME. Sie können den vollständigen oder relativen Pfad zum Schlüssel in einfachen Anführungszeichen verwenden.

BillThor
quelle
2
Doppelte Anführungszeichen und die Verwendung von $ HOME haben mein Problem gelöst. Können Sie näher erläutern, was die ersten beiden Befehle bewirken? Ich war bereits mit dem Einrichten einer Konfigurationsdatei vertraut. Das einzige Problem besteht darin, dass ich mehrere Konten auf einem Server habe. Ich erwarte nicht, dass ich damit mehrere Identitätsdateien für denselben Host angeben kann.
CWD
+1 Dies hat mein Problem mit drone.io behoben :) Vielen Dank.
Bhargav Nanekalva
Das ist verdammt großartig. FTR, Sie können auch den Standardbenutzernamen angeben, unter dem eine Verbindung hergestellt werden soll, z. B. User ubuntubei der Konfiguration für eine EC2-Ubuntu-Instanz :) Danke!
DanielSmedegaardBuus
Wenn Sie eine Shell im csh-Stil (wie z. B. fish) verwenden, tun Sie dieseval (ssh-agent -c)
Dave,
77

Benutze das eine oder das andere $HOME

rsync -avz -e "ssh -p1234  -i \"$HOME/.ssh/1234-identity\"" dir remoteUser@server:

oder vollständiger Pfad zum Schlüssel:

rsync -avz -e "ssh -p1234  -i /home/username/.ssh/1234-identity" dir user@server:

Getestet mit rsync 3.0.9 unter Ubuntu

Tombart
quelle
3
Ja, das funktioniert einwandfrei. Sie müssen weder ssh-agent noch andere Konfigurationsoptionen verwenden.
Laurent
2
+1: Dies ist ein globierendes Problem, genau wie Sie "ls '~'" nicht machen konnten
Alex
$HOMEfunktioniert nicht in einfachen Anführungszeichen (keine Variablenerweiterung), daher müssen Sie entweder doppelte Anführungszeichen oder den absoluten Pfad verwenden.
Anol
in Standard Bash sollte funktionieren "$HOME"oder $HOMEohne Unterschied ( "${HOME}"ist auch möglich, wenn Sie es kompliziert machen wollen)
Tombart
Ich habe die einfachen Anführungszeichen in doppelte geändert.
Steve Bennett
36

Sie müssen den absoluten Pfad zu Ihrer Identitätsschlüsseldatei angeben. Dies ist wahrscheinlich eine Art Macken in rsync. (es kann doch nicht perfekt sein)

Ich bin erst vor ein paar Tagen auf dieses Problem gestoßen :-)

Alpha01
quelle
Sie können ~ verwenden, aber Sie können es nicht in einfache Anführungszeichen einbetten, da es dann nicht korrekt durch / home / username / ersetzt wird. Sie müssen doppelte Anführungszeichen verwenden, damit dies korrekt funktioniert. Siehe @ilcaveros Lösung
X. Tian
24

Das funktioniert bei mir

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" [email protected]:"/remote/dir/"
ilcavero
quelle
2
Aus irgendeinem Grund musste ich den vollständigen Pfad zur Identitätsdatei angeben, dh /home/user/.ssh/1234-identity. Dann hat es funktioniert. Möglicherweise, weil es dann eine andere Hülle ist, wie in Darhuuks Antwort vorgeschlagen.
osa
@osa du hast mich dort gerettet! Ich hatte ein Problem mit Drupal und rSYNC und das Problem war der Pfad ... seltsam.
Lee Woodman
6

Führen Sie den Befehl in bash oder sh aus? Dies könnte einen Unterschied machen. Versuchen Sie es ~durch $HOME. Versuchen Sie, die Zeichenfolge für die -eOption in doppelte Anführungszeichen zu setzen .

Darhuuk
quelle
6

Verwenden Sie die Schlüsseldatei mit rsync:

rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ [email protected]:/var/www/test
Avinash Raut
quelle