SSH .net sftp错误报文长度/打开SSH版本2 RSA

本文关键字:SSH 打开 版本 RSA net sftp 错误 报文 | 更新日期: 2023-09-27 18:03:10

我是新来的sftp,我正试图得到一个c#程序通过sftp发送一个文件到远程服务器不在我的控制之下。

使用如下代码:

using (var sftp = new SftpClient(FTPAddress, FTPName, FTPPassword))
                    {
                        ConnectionInfo myCI = sftp.ConnectionInfo;
                        sftp.Connect(); // <<<< Exception on connect
                        sftp.UploadFile(sftp_ms, FileName,true);
                        sftp.Disconnect();
                    }

我收到一个"Bad packet length"异常。

谷歌搜索显示,错误的数据包长度可能是加密格式不匹配,但我不知道如何解决。

我从客户那里收到的规格是:

Keys must be in Open SSH version 2 format RSA format

我不知道该怎么做。之前的问题如何解决'错误的数据包长度'在SSH.NET错误?有一个链接到sshnet。在Codeplex讨论中,删除你不想要的加密密钥解决了那个海报的问题。

我可以在ssh.net的connectioninfo类中看到16个条目,但它们都没有状态打开SSH版本2 RSA,尽管其中一个可能很好(我试过谷歌)。

我已经尝试了ip,名称和密码,我已经与filezilla和我连接没有问题;所以filezilla使用了正确的加密;我不知道怎么分辨它在用什么

帮助吗?安德鲁

SSH .net sftp错误报文长度/打开SSH版本2 RSA

这里有两个不同的问题。如果您遇到了错误的数据包长度问题,那么您可能必须遵循ssh.net Codeplex讨论中的指南来解决协商问题。这将解决初始连接的建立问题。

如果需要使用ssh私钥进行连接,则必须使用接受PrivateKey对象数组的构造函数之一。PrivateKey的一个构造函数接受一个流,您可以使用如下代码将私钥字符串转换为流:

var privKey = new PrivateKey(new MemoryStream(Encoding.ASCII.getBytes(sshPrivateKeyString)));
var sftpclient = new SftpClient(FTPAddress, FTPName, new PrivateKeyFile[] { privKey });

其他机制是使用显式PrivateKeyConnectionInfo实例:

var privKey = new PrivateKey(new MemoryStream(Encoding.ASCII.getBytes(sshPrivateKeyString)));
var privConnInfo = new PrivateKeyConnectionInfo(FTPAddress, FTPName, privKey);
var sftpClient = new SftpClient(privConnInfo);