[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Hangs on password queries once SSH session is up
[Thread Prev] | [Thread Next]
- Subject: Re: Hangs on password queries once SSH session is up
- From: chebrolu bhanuchandar <bhanuchebrolu@xxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Sat, 26 Jun 2010 11:43:29 +0530
- To: libssh@xxxxxxxxxx
hi lewis, it seems in socket read they made it blocking call, i think if u want u can made it non-block by using select or write a wraper function to that. On Thu, Jun 10, 2010 at 3:31 AM, <leware@xxxxxxxxxxxxxxxx> wrote: > > I wrote a telnet client for Windows some years ago, and I had always wanted > to add SSH to it. I finally got around to doing it, using libssh. Here's > how > it went, with one problem below. > > My first surprise was that the code required the SSL library. I guess it is > only used for its crypto code, not for the SSL protocol proper. Building it > went fine. > > I had more trouble building libssh. First, I didn't have CMake, so I had to > install that. > > ZLib is supposed to be optional, but I had quite a fight getting CMake to > stop asking for it. Once that was solved, CMake asked for doxygen. That was > enough for me :-). I took the problem from the other end, as I often do. I > just tried compiling the C code. That probably went faster than if had > continued installing stuff until CMake was happy. After some adjustments to > config.h, the following gave me what I needed (under Cygwin): > > gcc -c -DLIBSSH_STATIC -I../openssl-1.0.0/include/ -I/usr/include/w32api/ > -Iinclude/ -Ibuild -D_WIN32 libssh/*.c > ar rcs libssh.a *.o > > Anyway, the biggest issue I had is that the library uses blocking IO. My > telnet client is non-blocking (event-driven). To keep my life simple, I > decided to access the libssh code (once the channel is up) thru > (timer-based) > polling: if the socket says there is something available, I call into the > library. This works fine > 99% of the time, so I'm happy! But I would have > preferred a non-blocking API. Maybe I should look at libssh2 (but when > things > work, there is little motivation). > > --- > > However, I do have a problem in some scenarios. If, within an SSH session > (to > Linux), I try something which requires a password (eg. su/sudo, ftp), then > my > client hangs (does not return to its main event loop). The call chain at > that > point is the following (the socket has said it has data to read): > > (my client) > channel_poll > ssh_handle_packets > packet_read > packet_read2 > ssh_socket_wait_for_data > ssh_socket_completeread > ssh_socket_unbuffered_read > > The client is not consuming CPU, I assume it's blocked on a socket read. > > Does anyone have any quick hint at why? What is special about such cases? > Echo is turned off for the password prompt, but I would have thought this > is > entirely a server-side issue, why would that impact the client? Or is the > ssh > protocol somehow involved (eg. using a protocol mechanism to fetch this > password, or in echo control)? One way to unblock the situation is to send > some output to the hung session from another one. Or the issue can be > worked > around by pasting the password into the client (complete with LF) all at > once > (so it goes out in a single channel_write()). > > The bug is of course in how I use the library, not in the library itself. > I'm just hoping for a hint that might help me solve that one small issue. > > Thanks > Pierre Lewis > > > -- Bhanuchandar Chebrolu
Hangs on password queries once SSH session is up | leware@xxxxxxxxxxxxxxxx |