如果没有 ssh_channel_read,ssh_channel_request_exec 将无法工作

问题描述 投票:0回答:1

我正在使用 ssh_channel_request_exec 在远程节点上执行命令“mkdir -p ~/.temp”。当 ssh_channel_request_exec 与 ssh_channel_read 一起使用时,目录的创建工作正常。另一方面,当不使用 ssh_channel_read 时,目录创建失败。

在这种情况下,ssh_channel_request_exec 不会向通道写入任何内容。那么,ssh_channel_read 这里有什么相关性呢?

 int exec_result = ssh_channel_request_exec(channel, "mkdir -p ~/.temp");
  if (exec_result != SSH_OK)
  {
      ssh_channel_close(channel);
      ssh_channel_free(channel);
      ssh_disconnect(session);
      ssh_free(session);

      return ;

}

ssh channel ssh-keys
1个回答
0
投票

在关闭通道之前,您需要允许命令完成。

ssh_channel_read
的副作用是它会延迟关闭通道。可能直到命令完成为止 - 所以到目前为止你可能很幸运,它延迟了足够长的关闭时间 - 比
mkdir
更长的运行命令可能仍然会失败。

如果您不想读取输出,您应该能够使用

ssh_channel_get_exit_status
来确定命令是否完成。

我不太了解 sshlib API,但一般来说,无论如何你都需要读取输出。因为如果您不这样做,并且该命令会生成足够的输出来填充输出缓冲区,则该命令将挂起。请参阅有关不同 SSH API 的这些问题:

© www.soinside.com 2019 - 2024. All rights reserved.