首页 文章

使用Tamir.SharpSsh的SSH / SFTP连接问题

提问于
浏览
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缓存有关?如果是这样,我该怎么做呢?

EDIT: 我使用wireshark检查了数据包,发现我的计算机没有执行Diffie-Hellman Key Exchange Init . 这一定是问题所在 .

EDIT: 我最终使用以下代码 . 请注意,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;
            }

谢谢 .

2 回答

  • 1

    如果不查看日志文件,很难说出问题所在 .

    但请记住,SCP不是SFTP - 它们是通过SSH运行的完全不同的协议 . 您的SFTP可能实际上不支持SCP - 并非所有SFTP服务器都支持SCP . CoreFTP可能正在使用SFTP .

    我们的商业软件包edtFTPnet/PRO也可能值得尝试,如果只是作为尝试让不同的客户端对您的服务器起作用的替代方案 .

  • 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");
    

    如果您有任何问题,请告诉我 .

相关问题