【发布时间】:2020-02-24 20:11:31
【问题描述】:
我正在尝试通过 SSH 从我的 C++ 应用程序连接到服务器(并发送关闭命令)。我已经通知服务器我的 SSH 密钥(在我的基于 FreeBSD 的 Freenas 服务器上更新了 authorized_keys)。
以下控制台命令立即生效(Manjaro Linux 控制台):
ssh -i /home/[uname]/.ssh/amd_freenas root@freenas.local poweroff
我正在尝试使用我的 C++ 代码中的以下命令来执行完全相同的操作:
execl("/sbin/ssh", "ssh", "-i /home/[uname]/.ssh/amd_freenas", "root@192.168.178.48", "poweroff", (char*)NULL);
从我的程序调用时,控制台输出始终显示我的 SSH 文件不存在,这是不正确的,因为直接控制台命令也没有问题(图片显示比较,上面的命令来自代码,底部一个直接在控制台中)。 错误输出为:
Warning: Identity file /home/al/.ssh/amd_freenas not accessible: No such file or directory.
我试图更改文件的权限(chmod 600),我试图将它移到别处并从那里读取。我不知道为什么这不起作用。该文件是我的私钥,所以应该是正确的。有人可以帮忙吗?
【问题讨论】:
-
SSH 作为库提供。为什么要费心调用预构建可执行文件?
-
@JesperJuhl 因为发送一个 SSH 命令需要 10 行代码。现在够我用了。