it-swarm.com.de

Wie wird das Passwort für den rsync SSH-Befehl automatisch übergeben?

Ich muss rsync für ssh ausführen und möchte dies automatisch ausführen, ohne dass das Kennwort für ssh manuell übergeben werden muss.

96
liysd

Sie sollten eine Schlüsseldatei ohne Passphrase für skriptbasierte SSH-Anmeldungen verwenden. Dies ist offensichtlich ein Sicherheitsrisiko. Achten Sie darauf, dass die Schlüsseldatei selbst ausreichend gesichert ist.

Anweisungen zum Einrichten des passwortlosen SSH-Zugriffs

43
Mad Scientist

Verwenden Sie das nicht interaktive Dienstprogramm ssh password provider "sshpass"

Auf Ubuntu

 Sudo apt-get install sshpass

Befehl zum rsync

 /usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p password ssh -o StrictHostKeyChecking=no -l username" src_path  dest_path
85
Rajendra

Sie können die Aufforderung zur Kennworteingabe bei rsync umgehen, indem Sie die Umgebungsvariable RSYNC_PASSWORD Auf das gewünschte Kennwort setzen oder die Option --password-file Verwenden.

24
Dexter

Wenn Sie keinen öffentlichen/privaten Schlüssel verwenden können, können Sie erwarten:

#!/usr/bin/expect
spawn rsync SRC DEST
expect "password:"
send "PASS\n"
expect eof
if [catch wait] {
    puts "rsync failed"
    exit 1
}
exit 0

Sie müssen SRC und DEST durch Ihre normalen rsync-Quell- und Zielparameter ersetzen und PASS durch Ihr Passwort ersetzen. Stellen Sie einfach sicher, dass diese Datei sicher gespeichert ist!

12
kainjow

Verwenden Sie einen SSH-Schlüssel.

Ansehen ssh-keygen und ssh-copy-id.

Danach können Sie ein rsync folgendermaßen verwenden:

rsync -a --stats --progress --delete /home/path server:path

Eine weitere interessante Möglichkeit:

  1. rSA- oder DSA-Schlüsselpaar generieren (wie beschrieben)
  2. öffentlichen Schlüssel an Host übergeben (wie bereits beschrieben)
  3. lauf:
 rsync --partial --progress --rsh = "ssh -i dsa_private_file" Hostname @ Host:/home/me/d. 

Hinweis: - i dsa_private_file Dies ist Ihr privater RSA/DSA-Schlüssel

Grundsätzlich ist dieser Ansatz dem von @Mad Scientist beschriebenen sehr ähnlich, Sie müssen jedoch Ihren privaten Schlüssel nicht nach ~/.ssh kopieren. Mit anderen Worten, es ist nützlich für Ad-hoc-Aufgaben (einmaliger passwortloser Zugriff)

6
xhudik

Ich arbeite so aus:

sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir  [email protected]_Host:/remote_dir
5
andrey465

Obwohl Sie es bereits implementiert haben,

sie können auch eine beliebige expect -Implementierung verwenden (in Perl und Python finden Sie Alternativen: pexpect, paramiko usw.).

3
Joao Figueiredo

Das automatische Eingeben des Kennworts für den Befehl rsync ist schwierig. Meine einfache Lösung, um das Problem zu vermeiden, besteht darin, den zu sichernden Ordner bereitzustellen. Verwenden Sie dann einen lokalen Befehl rsync, um den bereitgestellten Ordner zu sichern.

mount -t cifs //server/source/ /mnt/source-tmp -o username=Username,password=password
rsync -a /mnt/source-tmp /media/destination/
umount /mnt/source-tmp
3
Andrew Seaford

Folgendes funktioniert für mich:

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

Ich musste sshpass installieren

3
mario

Ich verwende dazu eine VBScript-Datei auf einer Windows-Plattform, die mich sehr gut bedient.

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}"
2
joseph.smeng

Die offizielle Lösung (und andere) war unvollständig, als ich sie das erste Mal besuchte, und ich kam Jahre später zurück, um diesen alternativen Ansatz zu veröffentlichen, falls andere Personen hier auftauchen und beabsichtigen, ein öffentliches/privates Schlüsselpaar zu verwenden:

Führen Sie dies von der Zielsicherungsmaschine aus, die von der Quellsicherung zur Zielsicherung wechselt

rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' [email protected]:/home/user/Server/ /home/keith/Server/

Führen Sie dies von der Quellmaschine aus, die von der Quell- zur Zielsicherung sendet

rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ [email protected]:/home/user/Server/

Wenn Sie keinen alternativen Port für ssh verwenden, sehen Sie sich die eleganteren Beispiele unten an:

Führen Sie dies von der Zielsicherungsmaschine aus, die von der Quell- zur Zielsicherung wechselt:

Sudo rsync -avi --delete [email protected]:/var/www/ /media/sdb1/backups/www/

Führen Sie dies von der Quellmaschine aus, die von der Quell- zur Zielsicherung sendet:

Sudo rsync -avi --delete /media/sdb1/backups/www/ [email protected]:/var/www/

Wenn Sie immer noch zur Eingabe eines Kennworts aufgefordert werden, müssen Sie Ihre ssh-Konfiguration in /etc/ssh/sshd_config überprüfen und sicherstellen, dass die Benutzer in Quelle und Ziel jeweils den jeweiligen öffentlichen ssh-Schlüssel der anderen Benutzer haben, indem Sie sie mit ssh-copy-id [email protected] senden.

(Wiederum dient dies zur Verwendung von ssh-Schlüsselpaaren ohne Kennwort als alternative Methode und nicht zur Übergabe der Passwort über eine Datei übergeben.)

1
oemb1905