1、windows由于没有直接的方法远程控制Linux系统下软件,因此需要在linux下安装SSH服务。
2、Linux系统安装SSH服务请参考:Linux环境搭建(一)— 实现ssh连接_linux 配置ssh csdn-CSDN博客。
3、在windows下由于使用ssh服务,因此也需要使用Qssh对应的操作请参考:qt/C++下windows实现远程控制linux开关机(附源代码)_c++ 远程关linux-CSDN博客中第三点。
4、废话不多说,直接上控制代码:
void softwareControlModel::softwareControlLinux(QString str, QString Ip)
{
QSsh::SshConnectionParameters parameters;
parameters.port = 22;
parameters.userName ="root";//建议使用root权限登录ssh,防止后续操作缺少权限问题
parameters.password = "123456";
parameters.host = Ip;
parameters.timeout = 20;
parameters.authenticationType = QSsh::SshConnectionParameters::AuthenticationTypePassword;
QSsh::SshConnection* pSshCon = new QSsh::SshConnection(parameters);
bool ret = connect(pSshCon, &QSsh::SshConnection::connected, this, [=]() {
QSsh::SshConnection* pSshCon = (QSsh::SshConnection*)sender();
QSharedPointer<QSsh::SshRemoteProcess> myShell = pSshCon->createRemoteShell();
connect(myShell.data(), &QSsh::SshRemoteProcess::started, this, [=]() {
QSsh::SshRemoteProcess* pSshRemote = (QSsh::SshRemoteProcess*)sender();
if (str == "start")
{
pSshRemote->write(QString("cd 进行控制的软件所在文件路径\n").toLatin1().data());
pSshRemote->write(QString("./软件启动文件名\n").toLatin1().data());
pSshRemote->write(QString("pgrep -f 软件名\n").toLatin1().data());
}
else if (str == "stop")
{
pSshRemote->write(QString("pgrep -f 软件名\n").toLatin1().data());
pSshRemote->write(QString("pkill 软件名\n").toLatin1().data());
}
});
myShell->start();
});
pSshCon->connectToHost();
}
5、windows控制端引用如下:
void softwareControlModel::controlCmd(QString cmd, QString ip)
{
if(ip == "Linux主机ip")
{
if (cmd == "start")
{
softwareControlLinux("start", ip);
}
else if (cmd == "stop")
{
softwareControlLinux("stop", ip);
}
}
}
版权声明:本文为博主原创文章,转载请附上博文链接!