Come si usa un file di identità con rsync?


125

Come si usa un file di identità con rsync?

Questa è la sintassi che penso che dovrei usare con rsync per utilizzare un file di identità per connettersi:

rsync -avz -e 'ssh -p1234 -i ~ / .ssh / 1234-identity' \
"/ local / dir /" remoteUser@22.33.44.55: "/ remote / dir /"

Ma mi sta dando un errore:

Avvertenza: file di identità ~ / .ssh / 1234-identità non accessibile: nessun file o directory.

Il file va bene, le autorizzazioni sono impostate correttamente, funziona quando si fa ssh - ma non con rsync - almeno nella mia sintassi. Che cosa sto facendo di sbagliato? Sta cercando di cercare il file di identità sul computer remoto? In tal caso, come posso specificare che desidero utilizzare un file di identità sul mio computer locale ?

Risposte:


86

È possibile che si desideri utilizzare ssh-agente ssh-addcaricare la chiave in memoria. sshproverà automaticamente le identità da ssh-agent se riuscirà a trovarle. I comandi sarebbero

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

ssh-agentè un demone utente che contiene in memoria chiavi ssh non crittografate. ssh lo trova in base alle variabili di ambiente che ssh-agent genera durante l'esecuzione. L'uso evalper valutare questo output crea le variabili di ambiente. ssh-addè il comando che gestisce la memoria delle chiavi. L'agente può essere bloccato usando ssh-add. Una durata predefinita per una chiave può essere specificata all'avvio di ssh-agent e specificata per una chiave quando viene aggiunta.

È inoltre possibile impostare un file ~ / .ssh / config per fornire la definizione della porta e della chiave. (Vedi `man ssh_config per altre opzioni.)

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

La singola citazione del comando ssh impedisce l'espansione della shell necessaria per ~o $HOME. È possibile utilizzare il percorso completo o relativo alla chiave tra virgolette singole.


2
Le doppie virgolette e l'utilizzo di $ HOME hanno risolto il mio problema. Puoi approfondire cosa stanno facendo i primi due comandi? Conoscevo già la configurazione di un file di configurazione, l'unico problema è quando ho più account su un server. Non mi aspetto che mi permetterebbe di specificare più file di identità per lo stesso host.
Cwd,

+1 Questo ha risolto il mio problema con drone.io :) Grazie mille.
Bhargav Nanekalva,

Questo è fantastico. FTR, puoi anche specificare il nome utente predefinito per la connessione come, ad es. User ubuntuDurante la configurazione per un'istanza di Ubuntu EC2 :) Grazie!
DanielSmedegaard Buu

Se stai usando una shell in stile csh (come fish), allora falloeval (ssh-agent -c)
Dave,

77

Usa entrambi $HOME

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

o percorso completo della chiave:

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

Testato con rsync 3.0.9 su Ubuntu


3
Sì, funziona bene, non è necessario utilizzare ssh-agent o altre opzioni di configurazione.
laurent,

2
+1: questo è un problema sconvolgente, proprio come non potevi fare "ls '~'"
Alex

$HOMEnon funzionerà tra virgolette semplici (nessuna espansione variabile), quindi è necessario utilizzare virgolette doppie o il percorso assoluto.
anol

in Bash standard dovrebbe funzionare "$HOME"o $HOMEsenza alcuna differenza ( "${HOME}"è anche possibile, se si desidera renderlo complicato)
Tombart

Ho cambiato le virgolette singole in doppie.
Steve Bennett,

36

Devi specificare il percorso assoluto del file della chiave di identità. Questo probabilmente è una specie di stranezza in rsync. (non può essere perfetto dopo tutto)

Ho riscontrato questo problema solo pochi giorni fa :-)


Puoi usare ~ ma non puoi incorporarlo tra virgolette singole, perché non viene sostituito correttamente in / home / username / devi usare virgolette doppie per avere il corretto funzionamento che funziona correttamente, vedi la soluzione di @ilcavero
X Tian,

24

Questo funziona per me

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"

2
Per qualche motivo ho dovuto specificare il percorso completo del file di identità, ad es /home/user/.ssh/1234-identity. Quindi ha funzionato. Forse perché è quindi una shell diversa, come suggerito nella risposta di Darhuuk.
osa,

@osa mi hai salvato lì! Avevo un problema con Drupal e rSYNC e il problema era il percorso ... strano.
Lee Woodman,

6

Stai eseguendo il comando in bash o sh? Questo potrebbe fare la differenza. Prova a sostituirlo ~con $HOME. Prova a virgolette doppie per l' -eopzione.


6

usa il file chiave con rsync:

rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ ubuntu@231.210.24.48:/var/www/test
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.