Specificare il file di identità (id_rsa) con rsync


197

Devo fare backup periodici di una directory su un server remoto che è una macchina virtuale ospitata da un'organizzazione di ricerca. Esse impongono che l'accesso alle macchine virtuali sia tramite chiavi ssh, il che va bene, tranne per il fatto che non riesco a capire come puntare rsync alla chiave ssh per questo server.

Rsync non ha problemi se il file chiave è ~/.ssh/id_rsa, ma quando è qualcos'altro ottengo Permission denied (publickey).

Con ssh posso specificare il file di identità con -i, ma rsync sembra non avere tale opzione.

Ho anche provato a spostare temporaneamente la chiave sul computer locale ~/.ssh/id_rsa, ma allo stesso modo non funziona.

tl; dr

Puoi specificare un file di identità con rsync?


1
Utile anche per fare sudo rsync, che non usa i propri tasti ssh, per qualche motivo.
ijoseph,

1
@ijoseph Esatto, lo uso rsync -aAP "sudo -u user ssh" user@server:dir local_dirquando eseguo la sincronizzazione da script cron che funzionano come root
Martin Pecka,

Risposte:


342

È possibile specificare l'esatto comando ssh tramite l'opzione '-e':

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

Molti utenti di ssh non hanno familiarità con il loro file ~ / .ssh / config. È possibile specificare le impostazioni predefinite per host tramite il file di configurazione.

Host hostname
    User username
    IdentityFile ~/.ssh/somekey

A lungo termine è meglio imparare il file ~ / .ssh / config.


Non mi aiuta ad avere IdentityFile in ssh_config. Posso "ssh web1" senza problemi, ma quando si utilizza rsync a web1: ... fallisce con "Autorizzazione negata (chiave pubblica)".
Zitrax,

1
Prova ad attivare la verbosità del trasporto ssh: rsync -e 'ssh -vv' web1: / etc / issue / tmp / issue
Dan Garthwaite,

1
Ah. Se lo stai automatizzando e non sarai in grado di fornire una password, avrai bisogno di una chiave ssh senza password aggiuntiva configurata su entrambe le estremità. Se desideri che rsync funzioni senza una password in una sessione interattiva, dovrai utilizzare ssh-agent.
Dan Garthwaite,

16
Duuuuuuude! il ~/.ssh/configfile - mi hai aperto un nuovo universo!
demaniak,

2
~ / .ssh / config mi ha salvato la giornata, grazie mille.
smishra,

17

Questo può essere fatto con la configurazione utente SSH, vedere: http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/ sostanzialmente modificare ~ / .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 user@remote.host.net:home/user/directory/

Questo dovrebbe funzionare per qualsiasi programma che utilizza SSH, rsync,



4

PER TUA INFORMAZIONE:

1) La chiave pubblica si trova sempre nella directory home dell'utente che accede al server remoto, ovvero se si accede come "backup", si trova in /home/backup/.ssh/authorized_keys. L'ID utente al momento del login definisce la chiave pubblica utilizzata nella destinazione.

È possibile scegliere l'ID utente quando si effettua la connessione in due modi diversi:

ssh user_id@destination.server
or
ssh -l user_id  destination_server     (<-- that is lower case "L")

D'altra parte, alla tua fine, la chiave privata è in un modo simile in homedir dell'utente a meno che tu non la ignori come descritto nella risposta di Dan.

2) A scopo di backup può essere desiderabile creare una chiave riservata che è limitata per eseguire solo un comando come "rsync". Esiste una buona descrizione di quella relativa al backup "rsnapshot" che consente di eseguire il backup remoto dell'intero server utilizzando un account utente non privilegiato e "sudo":

"rsnapshot" howto

Rsnapshot può facilmente eseguire il backup di un sacco di server remoti o locali rendendolo utile server di backup programmato e centralizzato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.