【发布时间】:2015-09-22 03:45:38
【问题描述】:
我正在尝试使用 StrictHostKeyChecking 选项通过 execvp 运行 rsync。 这是我的代码:
#include <unistd.h>
int main() {
char *argv[] = {"rsync",
"remote_user@1.2.4.5:/tmp",
"/home/tmp/",
"-e 'ssh -o StrictHostKeyChecking=no'",
0};
execvp("rsync", argv);
}
我收到此错误:
rsync: -e '-o StrictHostKeyChecking=no': 未知选项 rsync 错误:main.c(1422) [client=3.0.6]
处的语法或使用错误(代码 1)我尝试了另一种方法:
#include <unistd.h>
int main() {
char *argv[] = {"rsync",
"remote_user@1.2.4.5:/tmp",
"/home/tmp/",
"-e",
"'ssh -o StrictHostKeyChecking=no'",
0};
execvp("rsync", argv);
}
但现在它因错误而失败:
rsync:执行 ssh -o StrictHostKeyChecking=no 失败:没有这样的文件或目录 (2) rsync 错误:在 pipe.c(84) [sender=3.0.6] 的 IPC 代码(代码 14)中出错
为什么它不理解 StrictHostKeyChecking 选项?
【问题讨论】:
-
我认为
execvp期望这会像 shell 那样被拆分为参数。因此,将-e转移到自己的领域是朝着正确的方向发展。接下来我将尝试删除 ssh 参数周围的单引号。外壳也会剥离这些。