Libssh2:在"每个线程的通道"基础上在线程之间共享 ssh 会话是否安全?

Libssh2: Is safe to share ssh session between threads on "channel per thread" basis?

本文关键字:线程 会话 ssh 共享 安全 之间 是否 通道 Libssh2 基础上      更新时间:2023-10-16

假设我建立了ssh连接,然后使用libssh2_channel_open_session()创建了多个通道 - 所有这些都在一个主线程中。

然后我为每个通道创建一个线程,这些线程开始从它们的通道写入和读取。每个线程仅使用其LIBSSH2_CHANNEL*指针,从不访问会话句柄 (LIBSSH2_SESSION* (。

然后主线程加入所有线程并关闭会话。

这安全吗?我在 LibSSH2 文档中发现的唯一关于线程安全的是"只是不要同时共享句柄"。但是,我不明白这如何适用于我的情况。我不直接共享句柄,但通道句柄可能会共享会话句柄。

不,由于您提到的原因,这不是线程安全的:通道共享会话句柄。此外,通道通过会话的单个 TCP 连接进行多路复用,因此在非阻塞上下文中,在开始对另一个通道的操作之前完成通道上的操作非常重要。

如果您计划从多个线程使用会话(通道、sftp 等(的任何句柄,则可能需要使用互斥锁保护会话。