[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Hangs on password queries once SSH session is up


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

References:
Hangs on password queries once SSH session is upleware@xxxxxxxxxxxxxxxx
Archive administrator: postmaster@lists.cynapses.org