Geben Sie die Identitätsdatei (id_rsa) mit rsync an

196

Ich muss regelmäßig Sicherungen eines Verzeichnisses auf einem Remote-Server durchführen, der eine virtuelle Maschine ist, die von einer Forschungsorganisation gehostet wird. Sie schreiben vor, dass der Zugriff auf VMs über SSH-Schlüssel erfolgt, was alles in Ordnung ist, mit der Ausnahme, dass ich nicht herausfinden kann, wie Rsync auf den SSH-Schlüssel für diesen Server verweist.

Rsync hat kein Problem, wenn die Schlüsseldatei ist ~/.ssh/id_rsa, aber wenn es etwas anderes ist, bekomme ich Permission denied (publickey).

Mit ssh kann ich die Identitätsdatei mit angeben -i, aber rsync scheint keine solche Option zu haben.

Ich habe auch versucht, den Schlüssel vorübergehend auf den lokalen Rechner zu verschieben ~/.ssh/id_rsa, aber das funktioniert ebenfalls nicht.

tl; dr

Können Sie mit rsync eine Identitätsdatei angeben?

Jangari
quelle
1
Nützlich auch, um etwas zu tun sudo rsync, das aus irgendeinem Grund keine eigenen SSH-Schlüssel verwendet.
ijoseph
1
@ijoseph Genau das verwende ich rsync -aAP "sudo -u user ssh" user@server:dir local_dirbeim Synchronisieren von Cron-Skripten, die als root ausgeführt werden
Martin Pecka

Antworten:

341

Sie können den genauen Befehl ssh mit der Option '-e' angeben:

rsync -Pav -e "ssh -i $HOME/.ssh/somekey" username@hostname:/from/dir/ /to/dir/

Viele SSH-Benutzer sind mit ihrer ~ / .ssh / config-Datei nicht vertraut. Sie können die Standardeinstellungen pro Host über die Konfigurationsdatei festlegen.

Host hostname
    User username
    IdentityFile ~/.ssh/somekey

Auf lange Sicht ist es am besten, die Datei ~ / .ssh / config zu lernen.

Dan Garthwaite
quelle
Hilft mir nicht, das IdentityFile in ssh_config zu haben. Ich kann "ssh web1" ohne Probleme, aber bei Verwendung von rsync zu web1: ... schlägt dies mit "Permission denied (publickey)" fehl.
Zitrax
1
Versuchen Sie, die Ausführlichkeit des ssh-Transports zu erhöhen: rsync -e 'ssh -vv' web1: / etc / issue / tmp / issue
Dan Garthwaite
1
Ah. Wenn Sie dies automatisieren und kein Passwort eingeben können, benötigen Sie einen zusätzlichen passwortlosen SSH-Schlüssel, der an beiden Enden konfiguriert ist. Wenn Sie möchten, dass rsync in einer interaktiven Sitzung ohne Kennwort funktioniert, müssen Sie ssh-agent verwenden.
Dan Garthwaite
16
Duuuuuuude! die ~/.ssh/configDatei - Sie haben ein neues Universum für mich geöffnet!
Demaniak
2
~ / .ssh / config hat mir den Tag gerettet, vielen Dank.
Smishra
17

Dies kann mit der SSH-Benutzerkonfiguration erfolgen (siehe: http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/). Bearbeiten Sie im Grunde ~ / .ssh / config:

$ nano ~/.ssh/config
#Add Hosts below 
Host server1
HostName examplehost.com
User username
Port 22
IdentityFile /path/to/key

$ rsync -e ssh /home/user/directory [email protected]:home/user/directory/

Dies sollte für jedes Programm funktionieren, das SSH, rsync,

Cbaker510
quelle
4

Zu Ihrer Information:

1) Der öffentliche Schlüssel befindet sich immer im Home-Verzeichnis des Benutzers, der sich am Remote-Server anmeldet. Wenn Sie sich also als "Backup" anmelden, befindet er sich unter /home/backup/.ssh/authorized_keys. Die Benutzer-ID beim Anmelden definiert den öffentlichen Schlüssel, der am Ziel verwendet wird.

Sie können die Benutzer-ID beim Herstellen der Verbindung auf zwei verschiedene Arten auswählen:

ssh [email protected]
or
ssh -l user_id  destination_server     (<-- that is lower case "L")

Auf der anderen Seite befindet sich der private Schlüssel am Ende Ihres Benutzerverzeichnisses auf ähnliche Weise, es sei denn, Sie überschreiben ihn wie in Dans Antwort beschrieben.

2) Für Sicherungszwecke kann es wünschenswert sein, einen eingeschränkten Schlüssel zu erstellen, der nur einen Befehl wie "rsync" ausführen kann. Es gibt eine gute Beschreibung zu dem Thema "rsnapshot" -Sicherung, mit der Sie den gesamten Server mit einem nicht privilegierten Benutzerkonto und "sudo" remote sichern können:

"rsnapshot" -Anleitung

Rsnapshot kann auf einfache Weise eine Reihe von Remote- oder lokalen Servern sichern, was es zu einem praktischen geplanten und zentralisierten Sicherungsserver macht.

ajaaskel
quelle