代码之家  ›  专栏  ›  技术社区  ›  jinsungy

使用tamir.sharpssh的ssh/sftp连接问题

  •  5
  • jinsungy  · 技术社区  · 15 年前

    这是我连接文件并将其发送到远程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密钥交换init。这一定是问题所在。

    编辑: 我最终使用了以下代码。注意,严格的hostkeychecking已关闭,以简化操作。

                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 回复  |  直到 13 年前
        1
  •  1
  •   Bruce Blackshaw    15 年前

    如果不查看日志文件,就很难知道问题出在哪里。

    但是请记住,scp不是sftp——它们是运行在ssh上的完全不同的协议。您的sftp可能实际上不支持scp—并非所有sftp服务器都支持。coreftp可能正在使用sftp。

    我们的商业包装, edtFTPnet/PRO ,也可能值得尝试,如果只是作为一种替代方法,尝试让另一个客户机针对您的服务器工作的话。

        2
  •  6
  •   Jeganinfo    14 年前

    我使用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");
    

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