Я новичок в программировании 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;
}
}
?>
извините за мой плохой EN
Возможно, вам повезло с phpseclib, чистой реализацией PHP SSH2. например.
<?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)
. Таким образом, вы можете сделать ping 127.0.0.1
на Linux, который не остановится, но phpeclib остановится через минуту.
Возможно, это не вопрос OP, но заголовок содержит php sshpass ssh, стоит добавить простой пример php, используя sshpass
и ssh
с 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";
Я работал несколько дней, чтобы сделать работу ssh2 в PHP [выделенной серверной панели администратора на www], но я не нашел решения для проблемы с выходом. Единственное, что работает (но это достаточно хорошо для некоторых скриптов) заключается в том, чтобы спать некоторое время между "exec" и "read":
$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;