libs sh s sh одному хосту через другого - PullRequest
0 голосов
/ 05 февраля 2020

Я могу использовать libs sh to s sh для какого-нибудь host1, успешно выполнять команды и получать вывод. Я хотел s sh с host1 на другой host2 (192.168.29.3) и выполнить команду на host2 и получить вывод обратно так же, как я делал для host1.

Возможно ли это с libs sh? и как мне получить / прочитать вывод из 2-й сессии sh? является ли переадресация порта единственной или самой простой опцией для этого?

У меня установлены ключи, поэтому, если я sh перехожу на host2 с host1, мне не нужна никакая аутентификация (просто чтобы сделать мой тест проще сейчас) , Я проверил это вручную, и это работает. С этой настройкой, теперь используя libs sh после входа в host1 и запуска некоторой команды для проверки работоспособности (пока все хорошо), я попытался запустить следующую команду s sh, которую я запускаю вручную: ssh_channel_request_exe c (channel , "s sh 192.168.29.3");

Я получаю "Запрос канала exe c success" для вышеупомянутого, а затем код вешается на ssh_channel_read ().

Вот журналы и код.

[2020/02/05 10:34:46.157089, 2] ssh_packet_channel_open_conf:  Received a CHANNEL_OPEN_CONFIRMATION for channel 44:1
[2020/02/05 10:34:46.157138, 2] ssh_packet_channel_open_conf:  Remote window : 0, maxpacket : 32768
exec_command: ssh 192.168.29.3
[2020/02/05 10:34:46.162244, 2] channel_rcv_change_window:  Adding 2097152 bytes to channel (44:1) (from 0 bytes)
[2020/02/05 10:34:46.162285, 2] channel_request:  Channel request exec success
just before read```


  rc = ssh_channel_request_exec(channel, "ssh 192.168.29.3");
  if (rc != SSH_OK)   {
    printf("ssh_channel_request_exec failed\n");
    return rc;
  }
  printf("just before read\n");
  nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
  printf("just after read\n");

...