1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| 使用方式1: rsync --rsh=ssh -avz SRC user@host:/path/to/DST 使用这个命令,就可以把SRC目录,拷贝到服务器上的/path/to/DST/目录下了。而且是每次把差异部分给拷贝过去,非常快。 eg: rsync --rsh=ssh -avz ./myde root@172.16.37.2:/mnt/test 需要输入172.16.37.2的密码。通过ssh帐户(需要密码)执行rsync,将文件同步镜像到远程服务器。
如何无需密码通过ssh执行rsync来同步文件? 1.使用ssh-keygen生成密匙 现在我们来设置ssh,以便在执行ssh操作时不需要密码,使用ssh-keygen在本地生成公钥和私钥。 在客户端(本地机)命令行中执行:ssh-keygen youwenzhangMacBook-Pro:webjava zxsoft$ ssh-keygen 当提示输入密码时,只需输入两次回车键,不指配密码字符。
2.使用ssh-copy-id将公匙拷贝至远程主机 执行ssh-copy-id,将通过ssh-keygen生成的公匙拷贝至远程主机。 youwenzhangMacBook-Pro:webjava zxsoft$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.37.2 执行以上操作时,将会提示输入远程主机帐户和密码,然后就会自动将公匙拷贝至远程目录。 如果本地Mac机上没有 ssh-copy-id 命令,则可以使用以下命令代替ssh-copy-id: cat ~/.ssh/id_rsa.pub | ssh root@172.16.37.2 "umask 077; mkdir -p .ssh ; cat >> .ssh/authorized_keys"
3.现在就可以无需密码通过ssh来执行rsync了。 现在,你也可以不需要密码就可以ssh连接到远程主机: ssh root@172.16.37.2 重新来执行rsync,现在应该就不会提示输入密码了,如下: rsync --rsh=ssh -avz ./myde root@172.16.37.2:/mnt/test 不过这还需要手动执行rsync命令,如果要自动激发执行,在linux下可以用crontab来定时执行任务,在mac下可以用launchctl来定时执行任务。 于是在本地机(Mac机)的 ~/Library/LaunchAgents 目录中建立 myjava.server.rsync.37.2.plist 文件,内容如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>myjava.server.rsync.37.2</string> <key>ProgramArguments</key> <array> <string>/usr/bin/rsync</string> <string>-avz</string> <string>--rsh=ssh</string> <string>/Users/zxsoft/USVN/Java</string> <string>root@172.16.37.2:/mnt/java</string> </array> <key>WatchPaths</key> <array> <string>/Users/zxsoft/USVN/Java/</string> </array> </dict> </plist> 然后执行: launchctl load ~/Library/LaunchAgents/myjava.server.rsync.37.2.plist launchctl start myjava.server.rsync.37.2 就实现了每当目录下有文件变化,就自动同步到服务器了。 如果需要停止服务,则执行如下命令: launchctl stop myjava.server.rsync.37.2 launchctl unload ~/Library/LaunchAgents/myjava.server.rsync.37.2.plist
|