2010-07-21 294 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