5

これは、リモート SFTP サーバーに接続してファイルを送信するための私のコードです。

public static void SendDocument(string fileName, string host, string remoteFile, string user, string password)
        {            
            Scp scp = new Scp();

            scp.OnConnecting += new FileTansferEvent(scp_OnConnecting);
            scp.OnStart += new FileTansferEvent(scp_OnProgress);
            scp.OnEnd += new FileTansferEvent(scp_OnEnd);
            scp.OnProgress += new FileTansferEvent(scp_OnProgress);

            try
            {
                scp.To(fileName, host, remoteFile, user, password);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

CoreFTP を使用して、ファイルを正常に接続、送受信できます。したがって、問題はサーバーにはありません。上記のコードを実行すると、プロセスは scp.To メソッドで停止するようです。無期限にハングするだけです。

私の問題が何であるか知っている人はいますか?SSH キャッシュにキーを追加することと何か関係があるのでしょうか? もしそうなら、どうすればいいですか?

編集: wireshark を使用してパケットを調べたところ、コンピューターが Diffie-Hellman Key Exchange Init を実行していないことがわかりました。これが問題でなければなりません。

編集:私は次のコードを使用して終了しました。作業を簡単にするために StrictHostKeyChecking がオフになっていることに注意してください。

            JSch jsch = new JSch();
            jsch.setKnownHosts(host);

            Session session = jsch.getSession(user, host, 22);
            session.setPassword(password);

            System.Collections.Hashtable hashConfig = new System.Collections.Hashtable();
            hashConfig.Add("StrictHostKeyChecking", "no");
            session.setConfig(hashConfig);

            try
            {
                session.connect();

                Channel channel = session.openChannel("sftp");
                channel.connect();
                ChannelSftp c = (ChannelSftp)channel;

                c.put(fileName, remoteFile);

                c.exit();            
            }
            catch (Exception e)
            {
                throw e;
            }

ありがとう。

4

2 に答える 2

6

私は Tamir.SharpSSH を使用しています - 最新バージョン 1.1.1.13

これにはクラス SFTP があります。JSch の Session クラスを使用する代わりに、このクラスを直接使用して SFTP を実行できます。

クイックサンプルはこちら:

127.0.0.1 - サーバー IP

/SFTPFolder1/SFTPFolder2 - サーバーの場所 ファイルの移動先

        Sftp sftpClient = new Sftp("127.0.0.1", "myuserName", "MyPassword");

        sftpClient.Connect();

        sftpClient.Put(@"C:\Local\LocalFile.txt", "/SFTPFolder1/SFTPFolder2");

問題がある場合はお知らせください。

于 2010-02-16T15:50:02.333 に答える
1

ログ ファイルを見ないと、何が問題なのかを判断するのは困難です。

ただし、SCP は SFTP ではないことに注意してください。これらは、SSH 上で実行されるまったく異なるプロトコルです。SFTP が実際には SCP をサポートしていない可能性があります。すべての SFTP サーバーがサポートしているわけではありません。CoreFTP が SFTP を使用している可能性があります。

私たちの商用パッケージedtFTPnet/PROも試してみる価値があるかもしれません.

于 2009-10-17T06:06:25.780 に答える