SSH.NET - 消息类型80无效

Dav*_*nez 4 c# ssh sftp openssh ssh.net

我有以下代码尝试连接到使用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();
}
Run Code Online (Sandbox Code Playgroud)

调用该sftp.Connect()行时,会引发以下异常:

消息类型80无效

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

谢谢

Mar*_*ryl 7

消息80代表SSH_MSG_GLOBAL_REQUEST.

现代版本的OpenSSH服务器将此通用消息用于SSH协议的各种专有扩展.

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

不幸的是,似乎OpenSSH hostkeys-prove-00@openssh.com甚至在认证之前发送了一些(可能是).

SSH.NET 2016.0.0-beta1中已修复此问题.请参阅问题#8提交a1f46d4.


在旧版本中,转到Session.cs和在Session.Connect()方法中将以下行稍微向上移动,在验证码上方:

RegisterMessage("SSH_MSG_GLOBAL_REQUEST");
Run Code Online (Sandbox Code Playgroud)

我把它放在这条线下面:

RegisterMessage("SSH_MSG_USERAUTH_BANNER");
Run Code Online (Sandbox Code Playgroud)

  • @antmeehan它已经被移动了,实际上是:https://github.com/sshnet/SSH.NET.我已将此问题提交给项目:https://github.com/sshnet/SSH.NET/issues/8 (4认同)