これは、リモート 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;
}
ありがとう。