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

В течение многих лет код ниже работал. Затем 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: установленное соединение было прервано программным обеспечением на вашем хост-компьютере.
в Renci.SshNet.Session.WaitHandle (WaitHandle 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 "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  

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

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Никогда не получалось, чтобы исходный код снова работал ... Все еще не уверен, что изменилось с 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
0 голосов
/ 18 апреля 2019

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

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


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

...