0

新しい 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;
    }
  }
4

0 に答える 0