gpt4 book ai didi

php - 使用ssh2_fetch_stream进行远程尾矿

转载 作者:行者123 更新时间:2023-12-02 14:30:27 25 4
gpt4 key购买 nike

我正在尝试使用 phpseclib 进行远程跟踪。我使用以下代码来做到这一点:

<?php
include('Net/SSH2.php');
include('Crypt/RSA.php');
$server = $_POST['server'];

$ssh = new Net_SSH2($server);
$key = new Crypt_RSA();
$key->loadKey(file_get_contents('/home/{username}/.ssh/id_rsa'));
if (!$ssh->login('{username}', $key)) {
exit('Login Failed');
}

$tail="tail -n 1 {some lof file}";

while ($ssh->isConnected()) {
$ssh->exec(
$tail, function ($str) {
echo $str;
echo "<br>";
flush();
ob_flush();
}
);
}
?>

上面的代码的问题在于,它记录重复的条目,并被告知如果必须更改日志文件的调试级别,它将无法足够快地读取日志文件。建议我看看 ssh2_fetch_stream 。我试过了,但老实说很困惑。这是我目前的代码:
<?php
include('Net/SSH2.php');
include('Crypt/RSA.php');

$host = $_POST['server'];
$username = "{username}";
$publicKey = "/home/{username}/.ssh/id_rsa.pub";
$privateKey = "/home/{username}/.ssh/id_rsa";
$log = "{some log file}";

$conn = ssh2_connect($host);

if (ssh2_auth_pubkey_file($conn, $username, $publicKey, $privateKey)){
$stream = ssh2_exec($conn, 'tail -n 1 {some log file}');
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);

if (ob_get_level() == 0)
ob_start();

while ($stream_out) {
$line = fgets($stream_out);
echo $line.'<br />';
ob_flush();
flush();
sleep(1);
}
fclose($stream_out);
ob_end_flush();
}
?>

上面的代码仅打印一行,因为我不确定如何执行循环,因为我再也不能使用“while($ ssh-> isConnected())”了。我认为这是循环的,而不是循环的。不幸的是,因此,我无法测试它是否足够快地读取日志文件。

任何帮助或指针将不胜感激。我希望该解决方案能够奏效,因为不允许在我应该拖尾的日志文件的远程服务器上安装任何东西。

最佳答案

I was told that it will not read the log file fast enough if we had to change our log file debug level



谁告诉你那是错的。 phpseclib读取SSH服务器发送的内容,这正是libssh2(或与此相关的任何SSH客户端)所做的事情。

The problem with the code above is that it logs duplicate entries



那是有道理的。 tail -n 1 filename向您显示日志文件中的最后一个条目。如果输入的内容之间有十分钟的间隔,并且在那十分钟内,您运行了该命令100次,那么您将看到100个重复的输入。

我的建议:执行此操作(使用phpseclib):
$ssh->setTimeout(0);

$tail = 'tail -f /path/to/logfile';

$ssh->exec(
$tail, function ($str) {
echo $str;
echo "<br>";
flush();
ob_flush();
}
);

即。没有while循环,没有无数次地运行同一命令,等等。仅一个命令就运行了一次,并永久存在。

关于php - 使用ssh2_fetch_stream进行远程尾矿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48687579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com