【问题标题】:phpseclib ssh attach to screen process exec commands echo responsephpseclib ssh 附加到屏幕进程执行命令回显响应
【发布时间】:2026-01-27 09:50:01
【问题描述】:

您好我正在尝试使用 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 游戏服务器,但它不会工作,因为我在共享虚拟主机上阻止我需要连接的端口。

【问题讨论】:

    标签: php ssh gnu-screen phpseclib


    【解决方案1】:

    您可能需要使用$ssh-&gt;write("screen -r server1\n") 而不是$ssh-&gt;exec('screen -r server1');

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

    【讨论】: