SSH.NET - 消息类型 80 无效

Posted

技术标签:

【中文标题】SSH.NET - 消息类型 80 无效【英文标题】:SSH.NET - Message type 80 is not valid 【发布时间】:2016-08-21 21:40:02 【问题描述】:

我有以下代码尝试连接到使用 OpenSSH 构建的 SFTP 服务器(该服务器正常工作,因为我已经能够通过 WinSCP 客户端成功连接到该 FTP):

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 无效

为什么会这样?如何使用 SSH.NET 连接到我的 SFTP 服务器?

谢谢

【问题讨论】:

您的代码适用于我刚刚尝试过的 solaris 盒子 - 有一条消息说另一个 ssh 库有问题的 openssh.. 但它是一个较旧的.. 什么版本的 OpenSSH 和什么版本的 SSH.NET? @MartinPrikryl SSH.Net 版本:尝试了最新的源代码和 Nuget 包(在撰写本文时为 v2013.4.7)。 OpenSSH(我做了一个 ssh -v localhost):OpenSSH_7.1p1 Microsoft_Win32_port_with_VS,OpenSSL 1.0.2d 2015 年 7 月 9 日 我今天发布了 SSH.NET 的 beta 版 2016.0.0-beta1,修复了这个问题:>* 成功验证后立即收到 SSH_MSG_GLOBAL_REQUEST 时的竞争条件(GitHub 问题 #8)预发布版 NuGet 包可用here。 【参考方案1】:

消息 80 代表SSH_MSG_GLOBAL_REQUEST

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

大多数客户端将/应该默默地忽略无法识别的消息。 SSH.NET 也确实忽略了SSH_MSG_GLOBAL_REQUEST,但在身份验证完成之前它不会收到消息。

不幸的是,OpenSSH 似乎在身份验证之前就发送了其中的一些(可能是hostkeys-prove-00@openssh.com)。

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


在旧版本中,转到Session.cs 并在Session.Connect() 方法中将下面的行向上移动,位于身份验证代码上方:

RegisterMessage("SSH_MSG_GLOBAL_REQUEST");

我会把它放在这条线的下面:

RegisterMessage("SSH_MSG_USERAUTH_BANNER");

【讨论】:

太棒了,根据您对源代码更改的建议,我终于可以绕过该错误并进行连接。现在我可以继续玩我认为的图书馆了。谢谢! 谢谢。有谁知道这个项目是否仍在积极进行中?也许是时候把它移到 Github 上了? @antmeehan 实际上已经被移动了:github.com/sshnet/SSH.NET。我已将此问题提交给项目:github.com/sshnet/SSH.NET/issues/8

以上是关于SSH.NET - 消息类型 80 无效的主要内容,如果未能解决你的问题,请参考以下文章

SAAJ0537:无效的内容类型。可能是错误消息而不是 SOAP 消息

google 的从 c# 到 java 的协议缓冲区 - 协议消息标签的线路类型无效

错误消息:“float”和“int”类型的无效操作数到二进制“operator%”

Spring Security Oauth2 客户端获取访问令牌失败,请求代码无效=415,消息=不支持的媒体类型

SQL 消息无效的列类型:没有为类 oracle.jdbc.driver.T4CLongRawAccessor 实现 getBLOB

Azure 无法访问证书 PrivateKey“指定的提供程序类型无效”