Ho bisogno di fare rsync da ssh e voglio farlo automaticamente senza bisogno di passare la password per ssh manualmente.come passare la password per il comando ss rsync
risposta
È necessario utilizzare un file di chiavi senza passphrase per gli accessi ssh con script. Questo è ovviamente un rischio per la sicurezza, fare in modo che il file di chiavi sia adeguatamente protetto.
utilizzare una chiave SSH:
sguardo ssh-keygen e ssh-copy-id.
Dopo di che è possibile utilizzare un rsync in questo modo:
rsync -a --stats --progress --delete /home/path server:path
Se uso la chiave con ssh, scrivo: ssh u @ serv -i ./rsa Ma come farlo in rsync? – liysd
Se inserisci la chiave nella tua directory .ssh e le assegni un nome standard (in genere id_rsa/id_rsa.pub) verrà rilevata automaticamente da rsync. –
Anche se hai già implementato da ora,
è anche possibile usare qualsiasi expect implementazione (troverete alternative in Perl , Python: pexpect, paramiko, ecc.)
È possibile evitare la richiesta della password sul comando rsync impostando la variabile di ambiente RSYNC_PASSWORD sulla password che si desidera utilizzare o utilizzando l'opzione --password-file.
funziona solo se il server di destinazione ha un daemon rsync in esecuzione –
Anche se questa risposta non aiuta a meno che non si usi il daemon rsync, Google mi ha scaricato qui ed era esattamente ciò di cui avevo bisogno. Per me, avevo bisogno di rsync diretto a rsync, no ssh. Ho appena usato l'opzione del file di password e ho funzionato perfettamente per uno script. – gregthegeek
Usa "sshpass" utility provider di password di ssh non interattivo
Su Ubuntu
sudo apt-get install sshpass
Comando per rsync
/usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p password ssh -o StrictHostKeyChecking=no -l username" src_path dest_path
So che non si tratta di best practice, ma ho un NAS con un SSHD storpio che non eseguirà l'autenticazione basata su chiave. Questa risposta è stata la parte mancante del mio puzzle di backup automatico. Quindi +1 per la risposta dell'ultimo resort –
Non sapevo di sshpass, è stato utile in una situazione complicata. – haridsv
Se non puoi usare un file di chiavi, ma non vuoi includere la password nel comando, puoi scriverlo in un file temporaneo e includerlo in questo modo: 'sshpass -p \' cat .password \ 'ssh [.. .] '. Quindi proteggi il tuo file '.password' da' chmod 400 .password' per assicurarti che solo il tuo utente possa leggerlo. – lutuh
un'altra possibilità interessante: 1. Generare RSA o DSA coppia di chiavi (come descritto) 2. inserisci la chiave pubblica per l'host (come già descritto) 3. Eseguire:
rsync --partial --progress --rsh="ssh -i dsa_private_file" [email protected]:/home/me/d .
Nota: -i dsa_private_file che è il vostro RSA/DSA chiave privata
In sostanza, questo approccio è molto simile a quello descritto da @Mad Scientist, tuttavia si fa non devi copiare la tua chiave privata in ~/.ssh. In altre parole, è utile per le attività ad-hoc (un tempo di accesso senza password)
Se non è possibile utilizzare un chiavi pubbliche/private, è possibile utilizzare aspettare:
#!/usr/bin/expect
spawn rsync SRC DEST
expect "password:"
send "PASS\n"
expect eof
if [catch wait] {
puts "rsync failed"
exit 1
}
exit 0
Sarà necessario sostituire SRC e DEST con i normali parametri sorgente e destinazione rsync e sostituire PASS con la password. Assicurati che questo file sia conservato in modo sicuro!
questi comandi non sono disponibili sul mio 'Red Hat Enterprise Linux Server versione 5.11 (Tikanga)' –
L'immissione automatica della password per il comando rsync è difficile. La mia soluzione semplice per evitare il problema è montare la cartella di cui eseguire il backup. Quindi utilizzare un comando rsync locale per eseguire il backup della cartella montata.
mount -t cifs //server/source/ /mnt/source-tmp -o username=Username,password=password
rsync -a /mnt/source-tmp /media/destination/
umount /mnt/source-tmp
Seguendo l'idea pubblicato da Andrew Seaford, questo viene fatto usando sshfs:
echo "SuperHardToGuessPass:P" | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]:/mypath/ /mnt/source-tmp/ -o workaround=rename -o password_stdin
rsync -a /mnt/source-tmp/ /media/destination/
umount /mnt/source-tmp
Io uso un file VBScript per fare questo su piattaforma Windows, i server mi ha fatto molto bene.
set shell = CreateObject("WScript.Shell")
shell.run"rsync -a [email protected]:/Users/Name/Projects/test ."
WScript.Sleep 100
shell.SendKeys"Your_Password"
shell.SendKeys "{ENTER}"
i seguenti lavori per me
SSHPASS='myPassword'
/usr/bin/rsync -a -r -p -o -g --progress --modify-window=1 --exclude /folderOne -s -u --rsh="/usr/bin/sshpass -p $SSHPASS ssh -o StrictHostKeyChecking=no -l root" source-path myDomain:dest-path >&2
ho dovuto installare sshpass
-a implica già -rlptgoD e in generale, sarebbe molto più utile avere una linea di comando ridotta qui. – Christian
Non ci sono possibilità di mettere la password in un testo di comando? – liysd
Non facilmente, non ci sono opzioni per esso in ssh –
Va notato che questo non è sempre possibile fare (ad esempio molte implementazioni di server ssh Android sono piuttosto limitate). – Ponkadoodle