Antworten:
Sie sollten eine Schlüsseldatei ohne Passphrase für ssh-Anmeldungen mit Skript verwenden. Dies ist offensichtlich ein Sicherheitsrisiko. Achten Sie darauf, dass die Schlüsseldatei selbst ausreichend gesichert ist.
ssh -i
sollte auf der Client-Seite immer möglich sein. Meinen Sie damit, dass der Server möglicherweise nicht alle Schlüsseltypen unterstützt (z. B. ECDSA)? Das wäre jedoch kein großes Problem, nur ein Fall der Verwendung ssh-keygen -t
. Vermisse ich etwas
rsync -e
undssh -i
.
Verwenden Sie das nicht interaktive Dienstprogramm "sshpass" für den ssh-Passwortanbieter
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
sshpass -p`cat .password` ssh [...]
. Schützen Sie dann Ihre .password
Datei, indem Sie chmod 400 .password
sicherstellen, dass nur Ihr Benutzer sie lesen kann.
src_path
Server: Pfad sein, wie server01.mydomain.local:/path/to/folder
-a
Einschalten von rsync beinhaltet -rlptgoD
, können Sie den Befehl wie rsync -az ...
Sie können die Kennwortabfrage auf rsync
Befehl vermeiden, indem Sie die Umgebungsvariable RSYNC_PASSWORD
auf das Kennwort setzen, das Sie verwenden möchten, oder die --password-file
Option verwenden.
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 Kennwort ersetzen. Stellen Sie einfach sicher, dass diese Datei sicher gespeichert ist!
Red Hat Enterprise Linux Server release 5.11 (Tikanga)
Ich habe es so gemacht:
sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir remote_user@remote_host:/remote_dir
remote_port_ssh
eingestellt sein? Es sieht aus wie ein Platzhalter für einen tatsächlichen Wert.
Verwenden Sie einen SSH-Schlüssel.
Schau dir an ssh-keygen
und ssh-copy-id
.
Danach können Sie Folgendes verwenden rsync
:
rsync -a --stats --progress --delete /home/path server:path
Eine weitere interessante Möglichkeit:
rsync --partial --progress --rsh = "ssh -i dsa_private_file" host_name @ host: / home / me / d.
Hinweis: -i dsa_private_file 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 kennwortloser Zugriff)
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 installieren sshpass
Die automatische Eingabe 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
Obwohl Sie es bereits implementiert haben,
Sie können auch jede erwartete Implementierung verwenden (in Perl, Python finden Sie Alternativen: pexpect, paramiko usw.)
Ich verwende dazu eine VBScript-Datei auf der Windows-Plattform, die mich sehr gut bedient.
set shell = CreateObject("WScript.Shell")
shell.run"rsync -a Name@192.168.1.100:/Users/Name/Projects/test ."
WScript.Sleep 100
shell.SendKeys"Your_Password"
shell.SendKeys "{ENTER}"
Die offizielle Lösung (und andere) waren bei meinem ersten Besuch unvollständig, und so kam ich Jahre später zurück, um diesen alternativen Ansatz zu veröffentlichen, falls andere hier landen und beabsichtigen, ein öffentliches / privates Schlüsselpaar zu verwenden:
Führen Sie dies von der Zielsicherungsmaschine aus, die von der Quell- zur Zielsicherung wechselt
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' user@10.9.9.3:/home/user/Server/ /home/keith/Server/
Führen Sie dies vom Quellcomputer aus, der von der Quell- zur Zielsicherung sendet
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ user@10.9.9.3:/home/user/Server/
Wenn Sie keinen alternativen Port für ssh verwenden, sollten Sie die folgenden eleganteren Beispiele berücksichtigen:
Führen Sie dies von der Zielsicherungsmaschine aus, die von der Quell- zur Zielsicherung wechselt:
sudo rsync -avi --delete user@10.9.9.3:/var/www/ /media/sdb1/backups/www/
Führen Sie dies vom Quellcomputer aus, der von der Quell- zur Zielsicherung sendet:
sudo rsync -avi --delete /media/sdb1/backups/www/ user@10.9.9.3:/var/www/
Wenn Sie weiterhin zur Eingabe eines Kennworts aufgefordert werden, müssen Sie Ihre SSH-Konfiguration einchecken /etc/ssh/sshd_config
und sicherstellen, dass die Benutzer in Quelle und Ziel jeweils über den jeweiligen öffentlichen SSH-Schlüssel der anderen Benutzer verfügen, indem Sie diese mit sendenssh-copy-id user@10.9.9.3
.
(Auch dies dient zur Verwendung von SSH-Schlüsselpaaren ohne Kennwort als alternativen Ansatz und nicht zur Weitergabe des Kennworts über eine Datei.)
Nach der Idee von Andrew Seaford erfolgt dies mit sshfs:
echo "SuperHardToGuessPass:P" | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com:/mypath/ /mnt/source-tmp/ -o workaround=rename -o password_stdin
rsync -a /mnt/source-tmp/ /media/destination/
umount /mnt/source-tmp