Не удается подключиться к серверу SSH/SFTP с помощью VB.NET и SSH.NET, но WinSCP и FileZilla могут подключиться

В течение многих лет приведенный ниже код работал. Затем 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.Common.SshConnectionException в Renci.SshNet.dll
Renci.SshNet.Common.SshConnectionException: установленное соединение было прервано программным обеспечением на вашем хост-компьютере. waitHandle)
в Renci.SshNet.Session.Connect()
в Renci.SshNet.BaseClient.Connect()
в InvManager.Main.FTPUpload(String fileToBeUploaded, String uploadedFilename) в C:\Data\ vb.net\InvManager2.3\InvManager\Main.vb:строка 562

Убедитесь, что учетные данные все еще действительны на стороне сервера.

Журнал FileZilla, показывающий SFTP-соединение из того же окна Windows, на котором запущен код VB, с сервером:

Status: Connecting to server.com...  
Response: fzSftp started, protocol_version=8  
Command: open "[email protected]" 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  

Был бы признателен за помощь в получении этой работы снова.


person Jimmy Johnson    schedule 17.04.2019    source источник


Ответы (2)


Исходный код больше никогда не работал... До сих пор не уверен, что изменилось в 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
person Jimmy Johnson    schedule 18.04.2019

Библиотеку SSH.NET трудно отлаживать, поскольку она почти никакого логирования. Попробуйте выяснить, были ли какие-либо изменения в конфигурации SSH-сервера. Вполне вероятно, что сервер изменил установленный набор разрешенных шифров и других алгоритмов, что сделало его несовместимым с SSH.NET.

Вы также можете попытаться собрать SSH.NET из его исходного кода и добавить логирование/отладку. это, чтобы увидеть, почему он закрывает соединение.


Помимо этого, вы сможете решить эту проблему, переключившись на сборку WinSCP .NET, как WinSCP работает на вас. Если ваш код так же прост, как в вашем вопросе, было бы тривиально переключиться.

person Martin Prikryl    schedule 18.04.2019