新しい routerOS 7.1 では、ssh_request_exec の後に ssh_read を開始する前に遅延を追加する必要があります。別のケースでは、ssh_read がエラーを返します - 「リモート チャネルが閉じています」または空のエラーは、libssh のバージョンによって異なります。以前のバージョンの routeros (6.*) には影響を与えないでください。
int execResult = ssh_channel_request_exec(Device.channel, Command.c_str());
if (execResult != SSH_OK) {
ssh_channel_close(Device.channel);
ssh_channel_free(Device.channel);
Device.channel = nullptr;
return false;
}
double pauseTime = 0.3;
do {
Answer.append(answerFromDevice, readed);
pauseSeconds(pauseTime); // without this string (300 ms delay) ssh_channel_read return -1 on second read
readed = ssh_channel_read(Device.channel, answerFromDevice,
sizeof(answerFromDevice), 0);
} while (readed > 0);
if (readed < 0) {
std::string ErrorReason = ssh_get_error(Device.session);
if (ErrorReason.empty() || ErrorReason == "Remote channel is closed.") { // was error
} else {
ssh_channel_close(Device.channel);
ssh_channel_free(Device.channel);
Device.channel = nullptr;
return false;
}
}