Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos OSX和launchctl,rsync/ssh可以';找不到钥匙_Macos_Ssh_Rsync_Launchctl - Fatal编程技术网

Macos OSX和launchctl,rsync/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编写一个launchctl守护进程,这样它就可以每晚远程备份我的笔记本电脑

launchctl守护进程运行正常,它使用root用户调用rsync,rsync被指示使用ssh,并从我的用户目录中获取密钥文件。这就是它变得有趣的地方。无论我做什么,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>