这是我要做的:
首先,测试是否可以使用 ssh(使用用户名和密码登录):
$ ssh example.com
^D
创建 SSH 密钥:
$ ssh-keygen
(不要输入密码)
这将创建~/.ssh/id_rsa
(私钥)和~/.ssh/id_rsa.pub
(公钥文件)
您需要将公钥 ( id_rsa.pub
) 传输到远程服务器 ( example.com
),然后在远程服务器上执行以下操作:
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ rm id_rsa.pub
^D
这会将公钥添加到授权密钥集中。
您现在可以使用 ssh 连接到远程服务器,而无需使用用户名和密码。
接下来是使用 rsync 命令,以下内容就足够了:
$ rsync -avz -e ssh
--exclude '*.ht*' --exclude '*.sublime-*' --exclude 'cache/'
--exclude 'administrator/cache'
someUser@example.com:/directory/on/server /directory/on/local
(应该都在一条线上)
现在,一旦您对这对您感到满意,您就想将该命令放入一个 shell 脚本 ( rsync_script.sh
)
然后,您可以使用launchctl
它来安排它:
在~/Library/LaunchAgents/
, 创建com.example.rsync.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>com.example.rsync</string>
<key>KeepAlive</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/path/to/rsync_script.sh</string>
</array>
<key>StartInterval</key>
<integer>30</integer>
</dict>
</plist>
几个陷阱:
- 确保 rsync_script.sh 是可执行的,即执行
chmod 755 /path/to/the/rsync_script.sh
- 确保创建 SSH 密钥的用户与设置
launchd
plist 的用户相同。