Ищется php программист для выполнения небольшой задачи

Дмитрий
На сайте с 23.08.2006
Offline
222
2546
$connection = ssh2_connect(SSH_HOST, 22);
if ($connection) {
    $auth_result = ssh2_auth_password($connection, SSH_USER, SSH_PASSWORD);
    if ($auth_result) {
    $stream = ssh2_shell($connection, 'vt100', null, 80, 24, SSH2_TERM_UNIT_CHARS);
    sleep(1);
    fwrite($stream, "\x1B\x5B\x41");
    sleep(1);
    while($o = fgets($stream)){
        $response .= $o;
    }
    var_dump($response);
    }
    ssh2_disconnect($connection);
}

Сабж. Есть код, который авторизуется на сервере по ssh и открывает терминал. Далее нужно нажать кнопку вверх, именно " нажать кнопку" вверх, а не получить получить последнюю выполненную команду.

Результат: печатает в удаленном терминале B"
Ожидание: сэмулирует нажатие кнопки вверх, выведя последнюю исполненную команду

Код клавиши:

Проблема именно с сочетаниями клавиш, состоящих из последовательности ascii кодов. Простые коды отлично работают (проверьте  enter, буквы, ctrl+c и т.д.

Оплата webmoney или yoomoney сразу после получения работающего решения. Можно публиковать прямо сюда (никакой коммерческой тайны нет) - кто первый того и тапки. Оплата 25WMZ или 2000 юманей.

Разрабатываю и автоматизирую на php http://jonnyb.ru/
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#1
Простые коды отлично работают (проверьте  enter, буквы, ctrl+c и т.д.
Так, а где вы в коде отправляете данные хотя бы однму букву?
✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
Дмитрий
На сайте с 23.08.2006
Offline
222
#2
LEOnidUKG #:
Так, а где вы в коде отправляете данные хотя бы однму букву?

Я целых три "буквы" отправил:

fwrite($stream, "\x1B\x5B\x41");
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#3

Так?

fwrite($stream, "\x1b[A");

Ну если нужно и другие:

fwrite($stream, "\x1b[A"); // UP

fwrite($stream, "\x1b[B");  // DOWN

fwrite($stream, "\x1b[C"); // RIGHT

fwrite($stream, "\x1b[D"); // LEFT

T7
На сайте с 19.09.2018
Offline
63
#4
JonnyB :
Ожидание: сэмулирует нажатие кнопки вверх, выведя последнюю исполненную команду
$stream = ssh2_shell($connection, 'xterm', null, 80, 24, SSH2_TERM_UNIT_CHARS);

fwrite($stream, "\x0D");
fwrite($stream, "\x30\x31\x32\n"); # 012 -bash: 012: command not found
fwrite($stream, "\033\x5b\x41\x36\x0D");# 0126 -bash: 0126: command not found
#012 стрелка вверх,\x36 - 6 в итоге 0126


оно?

Дмитрий
На сайте с 23.08.2006
Offline
222
#5
LEOnidUKG #:

Так?

fwrite($stream, "\x1b[A");

Ну если нужно и другие:

fwrite($stream, "\x1b[A"); // UP

fwrite($stream, "\x1b[B");  // DOWN

fwrite($stream, "\x1b[C"); // RIGHT

fwrite($stream, "\x1b[D"); // LEFT

Отлично, этот способ работает. Не могли бы вы пояснить откуда взяли [A ? Ну и кошелек в личку :)

Дмитрий
На сайте с 23.08.2006
Offline
222
#6
timo-71 #:


оно?

Нет, решение выше Леонид дал

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий