2010-07-21 454 views

回答

34

對於腳本化的ssh登錄,您應該使用不帶密碼的密鑰文件。這顯然是一種安全風險,請注意密鑰文件本身已得到充分保護。

Instructions for setting up passwordless ssh access

+5

有沒有可能性把密碼用命令的文本? – liysd 2010-07-21 13:55:22

+1

不容易,在ssh中沒有選項它 – 2010-07-21 13:59:03

+0

應該指出,這並不總是可以做到的(例如許多android ssh服務器的實現是非常有限的)。 – Ponkadoodle 2015-08-28 04:05:17

4

使用SSH密鑰:

看看SSH-凱基的ssh-copy-id命令

在此之後,你可以使用rsync的是這樣的:

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

如果我用ssh寫密鑰,我寫:ssh u @ serv -i ./rsa 但是如何在rsync中做到這一點? – liysd 2010-07-21 14:15:57

+0

如果將密鑰放入.ssh目錄併爲其指定一個標準名稱(通常爲id_rsa/id_rsa.pub),它將由rsync自動提取。 – 2010-07-21 14:31:14

2

雖然你已經通過,現在實現了,

,你也可以使用任何expect執行(你會發現在Perl的替代品,Python:pexpect,paramiko等)。

17

通過將環境變量RSYNC_PASSWORD設置爲要使用的密碼或使用--password-file選項,可以避免rsync命令的密碼提示。

+28

只適用於目標服務器運行rsync守護進程 – 2013-03-02 16:58:15

+3

即使這個答案沒有幫助,除非使用rsync守護進程,Google在這裏登陸並且它正是我所需要的。對我而言,我需要直接rsync到rsyncd,不需要ssh。我只是使用密碼文件選項,並完美地爲腳本工作。 – gregthegeek 2014-07-22 19:40:08

61

使用 「sshpass」 非交互式SSH密碼提供實用

在Ubuntu

sudo apt-get install sshpass 

命令進行rsync

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

我知道這不是最好的做法,但我有一個殘缺不全的SSHD NAS,不會執行基於密鑰的身份驗證。這個答案是我的自動備份難題中缺少的一部分。所以+1爲最後的解決方案答案 – 2013-11-17 23:02:43

+0

不知道sshpass,在棘手的情況下派上用場。 – haridsv 2014-11-14 11:14:46

+5

如果您不能使用密鑰文件,但不想在命令中包含密碼,則可以將其寫入臨時文件並將其包含在內:'sshpass -p \'cat .password \'ssh [.. ]'。然後用'chmod 400 .password'保護你的'.password'文件,以確保只有你的用戶可以讀取它。 – lutuh 2015-08-06 14:20:50

4

另一個有趣的可能性:1。 產生RSA,DSA或密鑰對(如前所述) 2.將公鑰發送給主機(如前所述) 3.運行:

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

注:-i dsa_private_file這是您的RSA/DSA私鑰

基本上,這種做法是非常類似於@Mad科學家所描述的,但是你做不必將您的私鑰複製到〜/ .ssh。換句話說,它是有用的即席任務(一次性密碼訪問)

9

如果您不能使用公鑰/私鑰,您可以使用期望:

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

您需要將SRC和DEST替換爲正常的rsync源和目標參數,並將密碼替換爲PASS。只要確保這個文件安全存儲!

+2

這些命令不能在我的'紅帽企業Linux服務器版本5.11(Tikanga)' – 2015-06-18 09:00:16

0

自動輸入rsync命令的密碼很困難。避免這個問題的簡單解決方案是安裝要備份的文件夾。然後使用本地rsync命令備份安裝的文件夾。

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

繼作者:Andrew希福德的想法,這是使用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 
2

我用一個VBScript文件在Windows平臺上這樣做,服務器我非常好。

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

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 

以下作品我必須安裝sshpass

+0

上提供-a已經暗示-rlptgoD,並且通常,在這裏縮小命令行會更有幫助。 – Christian 2017-12-12 22:21:55