【问题标题】:Cannot connect to SSH/SFTP server with VB.NET and SSH.NET – but WinSCP and FileZilla can connect无法使用 VB.NET 和 SSH.NET 连接到 SSH/SFTP 服务器 - 但 WinSCP 和 FileZilla 可以连接
【发布时间】:2019-04-17 20:22:18
【问题描述】:

多年来,以下代码一直有效。然后在 4 月 11 日,它停止了。我在 Visual Studio 中注意到 SSH.NET 包已过期的警告,因此我更新了包...仍然无法正常工作。

Protected Sub FTPUpload(ByVal fileToBeUploaded As String, uploadedFilename As String)
    Try
        Using sftp As New SftpClient(sFtpServer, sFtpCreditUser, sFtpCreditPW)
            sftp.Connect()
            Dim upFile As Stream = File.OpenRead(fileToBeUploaded)
            sftp.UploadFile(upFile, uploadedFilename)
            upFile.Close()
            sftp.Disconnect()
        End Using
    Catch ex As Exception
        MsgBox(ex.Message & Chr(13) & Chr(10) & uploadedFilename)
    End Try
End Sub 

抛出异常:

Renci.SshNet.dll 中的 Renci.SshNet.Common.SshConnectionException
Renci.SshNet.Common.SshConnectionException:已建立的连接被主机中的软件中止。
在 Renci.SshNet.Session.WaitHandle(WaitHandle waitHandle)
在 Renci.SshNet.Session.Connect()
在 Renci.SshNet.BaseClient.Connect()
在 C:\Data\vb.net\InvManager2.3\InvManager\Main.vb:line 562 中的 InvManager.Main.FTPUpload(String fileToBeUploaded, String uploadFilename)

已验证凭据在服务器端仍然有效。

FileZilla 日志显示从运行主题 VB 代码的同一 Windows 机器到服务器的 SFTP 连接:

Status: Connecting to server.com...  
Response: fzSftp started, protocol_version=8  
Command: open "user@server.com" 22  
Command: Pass: ******  
Status: Connected to server.com  
Status: Retrieving directory listing...  
Command: pwd  
Response: Current directory is: "/home/server"  
Command: ls  
Status: Listing directory /home/server  
Status: Directory listing of "/home/server" successful  
Status: Disconnected from server  

希望能帮助您再次正常工作。

【问题讨论】:

    标签: .net vb.net ssh sftp ssh.net


    【解决方案1】:

    再也没有让原始代码再次运行...仍然不确定 ssh.net 发生了什么变化而破坏了代码。但是根据@MartinPrikryl,我重新编写了代码以使用 WinSCP 库而不是 SSH.Net,下面的代码让我们重新开始工作。

    Protected Sub WinScpSFTPupload(ByVal fileToBeUploaded As String, uploadedFilename As String)
            Try
                Dim sessionOptions As New SessionOptions
                With sessionOptions
                    .Protocol = Protocol.Sftp
                    .HostName = sFtpServer
                    .UserName = sFtpCreditUser
                    .Password = sFtpCreditPW
                    .GiveUpSecurityAndAcceptAnySshHostKey = True
                End With
                Using session As New Session
                    session.Open(sessionOptions)
                    session.PutFiles(fileToBeUploaded, uploadedFilename).Check()
                End Using
            Catch ex As Exception
                MsgBox(ex.Message & Chr(13) & Chr(10) & uploadedFilename)
            End Try
        End Sub ' Sub to WinSCP SFTP File
    

    【讨论】:

      【解决方案2】:

      hardly any logging 那样调试 SSH.NET 库很困难。尝试找出 SSH 服务器配置是否有任何变化。很可能是服务器更改了一组允许的密码和其他算法,导致它与 SSH.NET 不兼容

      您也可以尝试从其source code 构建 SSH.NET 并添加一些日志记录/调试它,以查看它关闭连接的原因。


      除此之外,您应该可以通过切换到WinSCP .NET assembly 来解决它,因为 WinSCP 适合您。如果您的代码与您的问题一样简单,那么切换将是微不足道的。

      【讨论】:

        猜你喜欢
        • 2023-01-20
        • 1970-01-01
        • 2020-07-27
        • 2022-06-14
        • 1970-01-01
        • 2018-05-27
        • 1970-01-01
        • 1970-01-01
        • 2019-08-01
        相关资源
        最近更新 更多