sshnet / SSH.NET

SSH.NET is a Secure Shell (SSH) library for .NET, optimized for parallelism.
MIT License
3.87k stars 915 forks source link

SftpClient.ConnectAsync hangs #1411

Open timurposhva opened 3 weeks ago

timurposhva commented 3 weeks ago

Hi!

When connecting to the sftp server, the method SftpClient.ConnectAsync hangs(timeout not working).

My configuration: Timeout: 60s OperationTimeout: 10s

OS: windows server 2019 SSH.NET version: 2024.0.0 NET version: 8.0

Stack trace:

System.OperationCanceledException: The operation was canceled. at System.Threading.CancellationToken.ThrowOperationCanceledException() at System.Threading.CancellationToken.ThrowIfCancellationRequested() at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken) at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource<System.Int32>.GetResult(Int16 token) at Renci.SshNet.Connection.ProtocolVersionExchange.SocketReadLineAsync(Socket socket, List1 buffer, CancellationToken cancellationToken) at Renci.SshNet.Connection.ProtocolVersionExchange.StartAsync(String clientVersion, Socket socket, CancellationToken cancellationToken) at Renci.SshNet.Session.ConnectAsync(CancellationToken cancellationToken) at Renci.SshNet.BaseClient.CreateAndConnectSessionAsync(CancellationToken cancellationToken) at Renci.SshNet.BaseClient.ConnectAsync(CancellationToken cancellationToken)

Thank you in advance!

Rob-Hague commented 3 weeks ago

Looks like the very initial protocol handshake is timing out. Are you able to connect to this server with any other SFTP client e.g. WinSCP?

timurposhva commented 3 weeks ago

Looks like the very initial protocol handshake is timing out. Are you able to connect to this server with any other SFTP client e.g. WinSCP?

I can connect using SSH.NET or WinSCP. But the SSH.NET stops responding from time to time. The synchronous version SftpClient.Connect works fine.

Rob-Hague commented 3 weeks ago

So do you mean that both Connect and ConnectAsync do not successfully connect, but Connect respects ConnectionInfo.Timeout while ConnectAsync doesn't, or that Connect() connects successfully but ConnectAsync() doesn't?

timurposhva commented 3 weeks ago

Connect respects ConnectionInfo.Timeout while ConnectAsync doesn't?

correct