使用exec命令启动服务器

时间:2017-06-05 07:11:27

标签: php laravel ssh exec phpseclib

我正在尝试基于连接到我的vps的ssh2创建一些东西,然后创建一些文件并使用exec命令运行它们。

我已经完成了一个更大的部分,即创建一个目录将文件从一个目录移动到另一个目录,现在我需要做这样的事情

以前创建的cd目录

nohup ./samp03srv

但我怎么能用php做到这一点?

这是我到目前为止所得到的

    $ssh = new SSH2($request->ip);

    if (!$ssh->login("root", "hpk2o321"))
    {
        return back()->withErrors("Authentication failed! Please check your credentials!");
    }

    $randomNum = substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyz"), 0, 11);

    $src = $request->path;
    $dest = "/home/servers/$randomNum";

    echo $ssh->exec("cp -r $src $dest");
    echo $ssh->exec('cd '.$dest.' &');
    echo $ssh->exec('chmod +x samp-npc samp03svr announce &');
    echo $ssh->exec('killall samp03svr &');
    echo $ssh->exec('nohup ./samp03svr &');

    echo $ssh->exec('pwd -P');

    $ssh->disconnect();

如果您需要更多信息,请询问!

here is the image

1 个答案:

答案 0 :(得分:0)

从你的代码:

echo $ssh->exec("cp -r $src $dest");
echo $ssh->exec('cd '.$dest.' &');
echo $ssh->exec('chmod +x samp-npc samp03svr announce &');
echo $ssh->exec('killall samp03svr &');
echo $ssh->exec('nohup ./samp03svr &');

尝试$ssh->exec('cd ' . $dest . '; chmod +x samp-npc samp03svr announce; killall samp03svr; nohup ./samp03svr &');

你的连续执行官的问题在于cd不会持续存在。考虑exec的一种好方法(尤其是当它不使用PTY时)是你在框中运行命令,然后关闭SSH会话。如果你这样做,你不会期望cd从一个会话持续到下一个会话,是吗?

从技术上讲,这不是phpseclib正在做的事情。 phpseclib正在调用SSH规范中描述的exec命令。打开一个通道,发送命令,返回输出,然后SSH服务器本身关闭通道,有效地结束会话。 SSH连接保持打开状态,因此您不需要再次进行密钥交换或身份验证,但通道已关闭。

PuTTY和OpenSSH的工作方式是他们使用我认为最好被理解为交互模式的模式。 exec不是互动的。您可以使用$ssh->read('#prompt#'); $ssh->write("cp -r $src $dest");等在phpseclib中启用交互模式。

http://phpseclib.sourceforge.net/ssh/examples.html#chdir详细说明。