1

您好我正在尝试使用 Phpseclib 连接到我的专用服务器,然后附加到屏幕进程,然后在屏幕进程中执行命令并返回结果,

我可以让 php 连接到服务器,我认为重新连接到屏幕进程,但我尝试回显的命令只返回“1”而不是我的预期。

<?php
set_include_path(get_include_path() . PATH_SEPARATOR . '.././static/classes/phpseclib');

include('.././static/classes/phpseclib/Net/SFTP.php');

//SSH Run Command
$ssh = new Net_SSH2($host);
if (!$ssh->login($user,$pass)) {
    exit('Login Failed SSH');
}

//Run the server
echo 'Attaching to screen process...';
$ssh->exec('screen -r server1');
echo 'Attached';
echo $ssh->write('status\n');
?>

如果有人可以对我的问题有所了解,我将不胜感激。

还有更多信息我这样连接的原因是因为它是我正在连接的 SRCDS 服务器,我可以使用 php 脚本来查询 srcds 游戏服务器,但它不会工作,因为我在共享虚拟主机上,它阻止了我的端口需要socket连接。

4

1 回答 1

0

你可能需要做$ssh->write("screen -r server1\n")而不是$ssh->exec('screen -r server1');

问题exec()在于它总是在新通道上执行命令。这不是 phpseclib 的问题,而是 SSH 协议的问题。这就像通过腻子执行“screen -r server1”,关闭腻子,重新打开腻子,执行“状态”并期望它输出您想要的内容。它不会。

于 2012-04-02T04:06:05.153 回答