Macos OSX和launchctl,rsync/ssh可以';找不到钥匙
所以我一直在尝试为rsync编写一个launchctl守护进程,这样它就可以每晚远程备份我的笔记本电脑 launchctl守护进程运行正常,它使用root用户调用rsync,rsync被指示使用ssh,并从我的用户目录中获取密钥文件。这就是它变得有趣的地方。无论我做什么,ssh都会抛出以下错误:Macos OSX和launchctl,rsync/ssh可以';找不到钥匙,macos,ssh,rsync,launchctl,Macos,Ssh,Rsync,Launchctl,所以我一直在尝试为rsync编写一个launchctl守护进程,这样它就可以每晚远程备份我的笔记本电脑 launchctl守护进程运行正常,它使用root用户调用rsync,rsync被指示使用ssh,并从我的用户目录中获取密钥文件。这就是它变得有趣的地方。无论我做什么,ssh都会抛出以下错误:rsync:无法执行ssh-I/Users/anthony/.ssh/id\u rsa:没有这样的文件或目录(2) 关键确实在那里。如果我自己从命令行调用ssh,我可以从我的用户帐户和根帐户使用该密钥。我
rsync:无法执行ssh-I/Users/anthony/.ssh/id\u rsa:没有这样的文件或目录(2)
关键确实在那里。如果我自己从命令行调用ssh,我可以从我的用户帐户和根帐户使用该密钥。我假设这与launchctl的作用域或权限有关?下面是launchctl正在使用的plist文件。我真的很感谢你在这方面的帮助
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UserName</key>
<string>root</string>
<key>Label</key>
<string>com.anthony.remoteBackup</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>23</integer>
<key>Minute</key>
<integer>00</integer>
</dict>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/rsync</string>
<string>-azb</string>
<string>--exclude=.*</string>
<string>--exclude=.*/</string>
<string>--backup-dir="/home/anthony/Documents/Old Remote Backup/macbook_air/"</string>
<string>--suffix=.old</string>
<string>--delete</string>
<string>--delete-excluded</string>
<string>-e "ssh -i /Users/anthony/.ssh/id_rsa"</string>
<string>/Users/anthony/Documents</string>
<string>anthony@remote_domain_name:"/home/anthony/Documents/Remote Backups/macbook_air/"</string>
</array>
<key>StandardOutPath</key>
<string>/tmp/remote_backup_test</string>
<key>StandardErrorPath</key>
<string>/tmp/remote_backup_test</string>
</dict>
</plist>
我怀疑问题在于你如何传递论点。多个参数中的双引号是shell语法,但是
ProgramArguments
数组的元素不会被shell解析,因此它们不应该存在。最重要的是,-e
后面的空格将由shell解析为参数分隔符,因此替换为:
<string>-e "ssh -i /Users/anthony/.ssh/id_rsa"</string>
-e“ssh-i/Users/anthony/.ssh/id\u rsa”
与:
-e
ssh-i/Users/anthony/.ssh/id\u rsa
只需从
--backup dir=
和target(anthony@...
)参数。就是这样!非常感谢你!
<string>-e "ssh -i /Users/anthony/.ssh/id_rsa"</string>
<string>-e</string>
<string>ssh -i /Users/anthony/.ssh/id_rsa</string>