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 密钥交换初始化。这一定是问题所在。

编辑:我最终使用了以下代码。请注意,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。你可以直接使用这个类来做SFTP,而不是使用JSch,Session类。

此处的快速示例:

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 回答