0

私はsftpを初めて使用し、ac#プログラムでファイルを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();
                    }

「不正なパケット長」の例外が発生します。

Googleの検索では、不正なパケット長は暗号化形式の不一致である可能性が高いことがわかりましたが、それを解決する方法がわかりません。

クライアントから受け取った仕様は次のとおりです。

Keys must be in Open SSH version 2 format RSA format

これを行う方法がわかりません。以前のSOの質問SSH.NETの「不正なパケット長」エラーを解決するにはどうすればよいですか?sshnet.codeplexのディスカッションへのリンクがあり、不要な暗号化キーを削除すると、その投稿者の問題が解決されます。

ssh.netのconnectioninfoクラスに16のエントリが表示されますが、そのうちの1つは非常に適切である可能性があります(グーグルを試しました)。

filezillaで与えられたIP、名前、パスワードを試しましたが、問題なく接続できます。したがって、filezillaはどういうわけか正しい暗号化を使用します。何を使っているのかわかりません。

ヘルプ ?

アンドリュー

4

1 に答える 1

0

ここには2つの異なる問題があります。パケット長の問題が発生している場合は、ssh.netCodeplexディスカッションのガイドに従ってネゴシエーションを解決する必要があります。これにより、初期接続の確立が解決されます。

接続にssh秘密鍵を使用する必要がある場合は、PrivateKeyオブジェクトの配列を受け取るコンストラクターの1つを使用する必要があります。PrivateKeyのコンストラクターの1つはストリームを受け取り、次のようなコードを使用して秘密キー文字列をストリームに変換できます。

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);
于 2013-03-11T11:48:18.340 に答える