如何通过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-keygen和ssh-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