这是我连接文件并将文件发送到远程 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 密钥交换初始化。这一定是问题所在。
编辑:我最终使用了以下代码。请注意,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;
}
谢谢。