Thanks Oliver, I have found the root cause. This is not a libssh issue, it is a Windows Powershell issue (I am trying to remotely execute a Windows PowerShell script through libssh). The root cause is, when my PowerShell script is done, the process "powershell.exe" is still there, not exit, so channel_read() blocks there for more details.
The solution is, when the PowerShell script finish everything, it kill itself, then channel_read() can return normally.
