在C++中通过ssh远程发送shell命令

3
我想要打开一个SSH会话到我的Raspberry Pi,并在我想要的时间运行简单命令echo 0=+10 > /dev/servoblaster(意味着不使用system("ssh pi@192.168.1.5 echo 0=+10 > /dev/servoblaster"),因为再次运行SSH需要时间)。用C ++最简单的方法是什么?

1
为什么选择 [tag:c++]?实际上,为什么选择 [tag:ssh]?你试图解决的根本问题是什么? - johnsyweb
1
我正在编写一个C++程序,通过上述命令控制Raspberry Pi的伺服电机,那么我如何在没有SSH的情况下访问和运行Raspberry Pi的命令? - Nhan Ly
1
为什么你不通过串口发送控制命令呢?那是最直观的方式。 - László Papp
4个回答

1
假设您只需要单向通信,请使用FILE *ssh = popen("ssh pi@192.168.1.5", "w")打开ssh连接,而不是system。这将为您提供一个可以写入的句柄,例如:fprintf(ssh, "echo 0=%#d > /dev/servoblaster", 10);。然后,ssh连接可用直到您在以后的某个时间点pclose(ssh);

如果您需要读取回来,您需要打开管道的两端,这需要一个“适当的fork工作”。在这种情况下,您可以从这个例子开始。

fork() and pipes() in c


你的方法和Sysem()方法总是需要一些时间来建立ssh连接,然后运行echo命令(这不符合我的需求),我想保持ssh连接并通过它运行echo命令。 - Nhan Ly
是的,使用 popen 可以让您保持 ssh 连接更长时间并发送多个命令。这就是重点。我已经编辑了答案以使其更清晰。 - Mats Petersson

0

对于发送简单的控制命令,ssh 至少是杀鸡焉用牛刀。

人们通常使用简单的串口来完成这项任务。可以通过多种方式实现,例如使用 QtSerialPort 等库或者直接通过 手动 termios 设置

您可以使用 "gserial" 来获取 USB 连接上的串口操作,并将其用作常规串口。


@NhanLy:你为什么要这样做?无论如何,SSH 都很奇怪。你可以使用网络套接字来实现。 - László Papp

0

0
我正在编写一个 C++ 程序,使用上述指令来通过 Raspberry Pi 控制伺服电机,我该如何在没有SSH的情况下访问和运行指令到 Raspberry Pi 呢?
您可以使用 WebIOPi 提供的 REST API 来访问并运行控制 Raspberry Pi 的伺服电机命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接