SSH.NET - 消息类型80无效

问题描述:

我有以下一段代码尝试连接到使用OpenSSH构建的SFTP服务器(服务器工作,因为我已经能够通过WinSCP客户端成功连接到此FTP ):SSH.NET - 消息类型80无效

ConnectionInfo ConnNfo = new ConnectionInfo("127.0.0.1", 22, "usertest", 
    new AuthenticationMethod[]{ 

     // Pasword based Authentication 
     new PasswordAuthenticationMethod("usertest","usertest"), 
    } 
); 

// Upload A File 
using (var sftp = new SftpClient(ConnNfo)) 
{ 
    sftp.Connect(); 
    sftp.ChangeDirectory(@"/C:/IISFTP/"); 
    using (var uplfileStream = File.OpenRead(uploadfn)) 
    { 
     sftp.UploadFile(uplfileStream, uploadfn, true); 
    } 
    sftp.Disconnect(); 
} 

当调用sftp.Connect()线,它提出了以下例外:

消息类型80无效

W¯¯ hy这是怎么回事?我如何使用SSH.NET连接到我的SFTP服务器?

谢谢

+1

你的代码工作我的Solaris系统我刚在 - 有一个消息有关的另一ssh库有问题openssh ..但它是一个较旧的.. – BugFinder

+2

什么版本的OpenSSH和SSH.NET的版本是什么? –

+0

@MartinPrikryl SSH.Net版本:试用了最新的源代码和Nuget Package(编写本文时为v2013.4.7)。 OpenSSH(我做了一个ssh -v本地主机):OpenSSH_7.1p1 Microsoft_Win32_port_with_VS,OpenSSL 1.0.2d 2015年7月9日 –

消息80个代表SSH_MSG_GLOBAL_REQUEST

现代版本的OpenSSH服务器对各种proprietary extensions of the SSH protocol使用此通用消息。

大多数客户会/应该默默地忽略无法识别的消息。 SSH.NET也会忽略SSH_MSG_GLOBAL_REQUEST,但在认证完成之前它不会期望消息。

不幸的是,OpenSSH似乎甚至在认证之前发送了其中的一些(可能是[email protected])。

该问题已在SSH.NET 2016.0.0-beta1中修复。请参阅Issue #8Commit a1f46d4


在旧版本中,转到Session.cs并在Session.Connect()方法的移动线下方有些向上,认证码以上:

RegisterMessage("SSH_MSG_GLOBAL_REQUEST"); 

我把它,只是这条线之下:

RegisterMessage("SSH_MSG_USERAUTH_BANNER"); 

+1

令人惊讶的是,在您对源代码中的更改提出建议后,我终于可以绕过该错误并进行连接。现在我可以继续玩我想的图书馆了。 谢谢! –

+0

谢谢。任何人都知道这个项目是否仍在积极开展工作?也许有时间把它移到Github上? – antmeehan

+4

@antmeehan它已被移动,实际上:https://github.com/sshnet/SSH.NET。我已经将此问题提交到该项目:https://github.com/sshnet/SSH.NET/issues/8 –