2010-07-21 8 views

Antwort

34

Sie sollten eine Schlüsseldatei ohne Passphrase für skriptbasierte SSH-Logins verwenden. Dies ist offensichtlich ein Sicherheitsrisiko, achten Sie darauf, dass das Keyfile selbst ausreichend gesichert ist.

Instructions for setting up passwordless ssh access

+5

Es gibt keine Möglichkeit, in einem Text von Befehl für die Umsetzung Passwort zu installieren? – liysd

+1

Nicht leicht, es gibt keine Optionen dafür in ssh –

+0

Es sollte angemerkt werden, dass dies nicht immer möglich ist (z. B. viele Android SSH-Server-Implementierung sind ziemlich begrenzt). – Ponkadoodle

4

einen SSH-Schlüssel verwenden:

Blick auf ssh-keygen und ssh-copy-id.

Danach Sie ein rsync auf diese Weise verwenden können:

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

Wenn ich Schlüssel mit ssh verwende, schreibe ich: ssh u @ serv -i./Rsa Aber wie es in Rsync zu tun? – liysd

+0

Wenn Sie den Schlüssel in Ihr .ssh-Verzeichnis eingeben und ihm einen Standardnamen geben (normalerweise id_rsa/id_rsa.pub), wird er automatisch von rsync übernommen. –

2

Obwohl Sie es schon jetzt,

implementiert haben

Sie auch jede expect Implementierung verwenden können (werden Sie Alternativen in Perl finden , Python: pexpect, paramiko, etc ..)

17

Sie können die Eingabeaufforderung für den Befehl rsync vermeiden, indem Sie die Umgebungsvariable RSYNC_PASSWORD auf das zu verwendende Kennwort setzen oder die Option --password-file verwenden.

+28

funktioniert nur, wenn auf dem Zielserver rsync-Daemon ausgeführt wird –

+3

Obwohl diese Antwort nicht hilft, wenn Sie rsync-Daemon verwenden, hat mich Google hier gelandet und es war genau das, was ich brauchte. Für mich brauchte ich direkte rsync zu rsyncd, kein ssh. Ich habe nur die Passwort-Datei-Option verwendet und perfekt für ein Skript gearbeitet. – gregthegeek

61

Use "sshpass" nicht interaktive SSH-Passwort-Provider-Dienstprogramm

auf Ubuntu

sudo apt-get install sshpass 

Befehl

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

Ich weiß, dass dies keine Best Practice ist, aber ich habe ein NAS mit einer verkrüppelten SSHD, die nicht auf Schlüsseln basiert. Diese Antwort war das fehlende Teil meines automatisierten Backup-Puzzles. Also +1 für die letzte Antwort –

+0

Wusste nicht über sshpass, kam in einer kniffligen Situation praktisch. – haridsv

+5

Wenn Sie eine Schlüsseldatei nicht verwenden können, aber das Kennwort nicht in den Befehl einfügen möchten, können Sie es in eine temporäre Datei schreiben und es wie folgt einschließen: 'sshpass -p \' cat .password \ 'ssh [.. .] '. Dann schützen Sie Ihre '.password' Datei mit' chmod 400 .password', um sicherzustellen, dass nur Ihr Benutzer sie lesen kann. – lutuh

4

eine weitere interessante Möglichkeit in rsync: 1. RSA generieren oder DSA Schlüsselpaar (wie es beschrieben wurde) 2. öffentlichen Schlüssel zum Host (wie es bereits beschrieben wurde) 3. Lauf:

rsync --partial --progress --rsh="ssh -i dsa_private_file" [email protected]:/home/me/d . 

Hinweis: -i dsa_private_file die Ihre RSA/DSA privat ist der Schlüssel

Grundsätzlich ist dieser Ansatz sehr ähnlich dem von @Mad Wissenschaftler beschrieben, aber Sie tun Sie müssen Ihren privaten Schlüssel nicht in ~/.ssh kopieren. Mit anderen Worten ist es für Ad-hoc-Aufgaben (einmal passwordless Zugang)

9

nützlich, wenn Sie nicht einen ö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 Ersetzen Sie SRC und DEST durch Ihre normalen rsync Quell- und Zielparameter und ersetzen Sie PASS durch Ihr Passwort. Stellen Sie sicher, dass diese Datei sicher gespeichert ist!

+2

diese Befehle sind nicht verfügbar auf meinem 'Red Hat Enterprise Linux Server Version 5.11 (Tikanga)' –

0

Die automatische Eingabe des Kennworts für den Befehl rsync ist schwierig. Meine einfache Lösung, um das Problem zu vermeiden, besteht darin, den Ordner zu sichern, der gesichert werden soll. Verwenden Sie dann einen lokalen rsync-Befehl zum Sichern des gemounteten Ordners.

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

die Idee folgend von Andrew Seaford geschrieben wird diese sshfs mit getan:

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 
2

ich eine VBScript-Datei verwenden diese Plattform auf Windows zu tun, es Server sehr gut mir.

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}" 
1

folgende Arbeiten 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 hatte sshpass

+0

-a bereits impliziert -rlptgoD und im Allgemeinen wäre es viel hilfreicher, hier eine reduzierte Befehlszeile zu haben. – Christian