多年来,以下代码一直有效。然后在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:第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
在重新启动此功能方面会有所帮助。
答案 0 :(得分: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
答案 1 :(得分:0)
像hardly any logging一样,调试SSH.NET库很困难。尝试找出SSH服务器配置是否发生任何更改。服务器很有可能更改了允许的密码和其他算法的集合,这使得它与SSH.NET不兼容
您还可以尝试从其source code中构建SSH.NET并添加一些日志记录/调试它,以了解为什么它会关闭连接。
除此之外,您应该能够通过切换到WinSCP .NET assembly来解决它,因为WinSCP可以为您工作。如果您的代码与问题中的代码一样简单,那么切换将是微不足道的。