Код ниже работает, он отлично возвращает имя пользователя, с которым я подключился к серверу SSH. Можно ли создать какую-то интерактивную оболочку, куда я мог бы отправлять команды сам. Например, черное окно терминала на Mac. Я видел некоторую документацию по функции ssh2_shell, где вы можете указать ширину и высоту окна терминала, но не можете заставить это работать.
$server['ip'] = "127.0.0.1";
$server['sshport'] = 22;
$server['user'] = "myUsername";
$server['pw'] = "myPassword!";
$command = "whoami";
if($ssh = ssh2_connect($server['ip'], $server['sshport'])) {
if(ssh2_auth_password($ssh, $server['user'], $server['pw'])) {
$stream = ssh2_exec($ssh, $command);
stream_set_blocking($stream, true);
$data = "";
while($buffer = fread($stream, 4096)) {
$data .= $buffer;
}
fclose($stream);
print $data;
} else {
echo "User or password is incorrect!";
}
} else {
echo "Could not connect to the ssh server!";
}
Я не думаю, что это возможно с libssh2, к сожалению. Единственный способ сделать это в PHP, о котором я знаю, это использовать phpseclib:
http://phpseclib.sourceforge.net/ssh/examples.html#top
Пример:
<?php
include('Net/SSH2.php');
include('File/ANSI.php');
$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
$ansi = new File_ANSI();
$ansi->appendString($ssh->read('username@username:~$'));
$ssh->write("top\n");
$ssh->setTimeout(5);
$ansi->appendString($ssh->read());
echo $ansi->getScreen(); // outputs HTML
?>
Других решений пока нет …