我想让PC1上的c ++程序在PC2上启动另一个程序,给出PC2的主机名。我现在不想让事情过于复杂,所以让我们假设程序在PC2上的可执行文件的搜索路径上。从我的理解,这可以通过ssh以某种方式完成?假设(为了进一步简化)我在PC1和PC2上都有一个帐户,这样如果我登录PC1,ssh就会连接我(没有任何需要我提供用户名和密码的交互)我怎么办?这样做呢? https://www.libssh.org/会帮助简化事情吗?
答案 0 :(得分:3)
您可能对此C ++ RPC库感兴趣:
http://szelei.me/introducing-rpclib
从他们自己的例子来看,在远程计算机上:
#include <iostream>
#include "rpc/server.h"
void foo() {
std::cout << "foo was called!" << std::endl;
}
int main(int argc, char *argv[]) {
// Creating a server that listens on port 8080
rpc::server srv(8080);
// Binding the name "foo" to free function foo.
// note: the signature is automatically captured
srv.bind("foo", &foo);
// Binding a lambda function to the name "add".
srv.bind("add", [](int a, int b) {
return a + b;
});
// Run the server loop.
srv.run();
return 0;
}
在本地计算机上:
#include <iostream>
#include "rpc/client.h"
int main() {
// Creating a client that connects to the localhost on port 8080
rpc::client client("127.0.0.1", 8080);
// Calling a function with paramters and converting the result to int
auto result = client.call("add", 2, 3).as<int>();
std::cout << "The result is: " << result << std::endl;
return 0;
}
要执行任何操作,您可以在远程计算机上进行“系统”调用。所以在服务器端有:
// Binding a lambda function to the name "add".
srv.bind("system", [](char const * command) {
return system(command);
});
现在在客户端,您可以:
auto result = client.call("system", "ls").as<int>();
显然,如果你想使用这样的库,你需要考虑安全性。这在受信任的LAN环境中运行良好。在像互联网这样的公共网络中,这可能不是一个好主意。
答案 1 :(得分:1)
构造命令行以使用ssh
执行远程命令。然后使用system()
执行该命令。
std::string pc2_hostname;
std::string cmd = "ssh " + pc2_hostname + " command_to_execute";
system(cmd.c_str());