如何通过rsync ssh命令的密码

我需要通过SSH做rsync,并希望自动执行,而不需要手动为ssh传递密码。

对于脚本化的sshlogin,您应该使用不带密码的密钥文件。 这显然是一个安全风险,注意密钥文件本身是充分保证。

有关设置无密码ssh访问的说明

使用“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 

您可以通过将环境variablesRSYNC_PASSWORD设置为要使用的密码或使用–password-file选项来避免rsync命令上的密码提示。

如果你不能使用公钥/私钥,你可以使用expect:

 #!/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和DESTreplace为正常的rsync源和目标参数,并将密码replace为PASS。 只要确保这个文件安全存储!

使用ssh密钥:

看看ssh-keygenssh-copy-id

之后,你可以使用这种方式的rsync:

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

另一个有趣的可能性:1.生成RSA或DSA密钥对(如上所述)2.将公钥发送给主机(如前所述)3.运行:

 rsync --partial --progress --rsh="ssh -i dsa_private_file" host_name@host:/home/me/d . 

注意: -i dsa_private_file这是你的RSA / DSA私钥

基本上,这种方法与@Mad Scientist描述的方法非常相似,但是您不必将您的私钥复制到〜/ .ssh。 换句话说,它对于临时任务是有用的(一次无密码访问)

虽然你现在已经实现了,

你也可以使用任何期望的实现(你可以在Perl,Python中find替代scheme:pexpect,paramiko等)。

我在Windows平台上使用一个VBScript文件来完成这个任务,它为我提供了很好的服务。

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

以下为我工作

 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

自动inputrsync命令的密码很困难。 我简单的解决scheme,以避免这个问题是挂载文件夹进行备份。 然后使用本地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 

按照Andrew Seaford发布的想法,这是使用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