Я могу использовать 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");