php sshpass 和 ssh2 的代码

php code for sshpass and ssh2

我是 PHP 编码新手 我正在编写新的简单脚本,但是当我输入这段代码时,我得到了空白页 谁能告诉我这段代码有什么问题吗?

<?php
if($_POST) {
$host = $_POST['host'];
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
if(!($con = ssh2_connect("127.0.0.1", "22")))
{
    echo "fail: unable to establish connection";
}
else
{
    if(!ssh2_auth_password($con, "root", "password"))
    {
        echo "fail: unable to authenticate ";
    }
    else
    {

        $stream = ssh2_exec($con, "".$host."");
            stream_set_blocking($stream, true);
        $item = "";
        while ($input = fread($stream,4096)) {
               $item .= $input;
        }
        echo $item;
    }
}

?>

对不起我的英语不好

我花了几天时间使 ssh2 在 PHP [www 上的专用服务器管理面板] 中工作,但我没有找到任何解决 输出 问题的方法。 唯一有效的方法(但这仅对某些脚本来说 足够 是好的)是 sleep 在 'exec' 和 [=20] 之间的某个时间=]:

$stream = ssh2_exec($connection->conn, 'pgrep screen');
stream_set_blocking($stream, true);
// sleep 0.5 sec, this trick won't work for commands that execution time is unpredictable
usleep(500000);
$line = '';
while($get = fgets($stream))
{
    $line .= $get;
}
echo $line;

phpseclib, a pure PHP SSH2 implementation 你的运气可能会更好。例如

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>

如果你想让命令 运行 在得到输出之前运行一定的时间,你可以 $ssh->setTimeout(1)。所以你可以在 Linux 上做 ping 127.0.0.1,这不会停止,但 phpseclib 仍然会在一分钟后停止。

也许这不是 OP 的问题,但标题指出 php sshpass ssh,值得添加一个简单的 php 示例,使用 sshpassssh 以及 exec().

$ssh_host = "127.0.0.1";
$ssh_port = "22";
$ssh_user = "root";
$ssh_pass = "password";
$command = "uname -a";
$connection = "/usr/bin/sshpass -p $ssh_pass /usr/bin/ssh -p $ssh_port -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $ssh_user@$ssh_host";
$output = exec($connection." ".$command." 2>&1");
echo "Output: $output";