【问题标题】:SFTP SSH.NET DLL instead of SharpSSHSFTP SSH.NET DLL 而不是 SharpSSH
【发布时间】:2012-08-02 16:25:04
【问题描述】:

我正在寻找一个免费的 .net DLL 来处理 SFTP 连接。

我发现了这个项目SharpSSH,但它缺少文档。

我花了很多时间来弄清楚 dll 是如何工作的。我创建了一个测试项目,并开始测试不同的功能。一些功能正在运行,例如删除文件。

putfile() 函数和 getfile() 有问题。

这里是一个例子:

Dim ssh As SFTPUtil
ssh = New SFTPUtil("MY SERVER", "MY USER", "MY PW")
ssh.GetFile("/home/sftptest/test111.xml", "C:\\text.xml")

注意 getfile() 参数是:

Public Sub GetFile(remotePath As String, localPath As String)

我介入了函数,但我没有得到传递这些参数的正确方法。

我真的不知道我应该使用斜杠(/)还是反斜杠()。我知道 Linux 使用 (/)

例如,我注意到“C:\”已转换为“C:\\”。

只是提到 SFTP 是在一台 linux 机器上。

谢谢。

【问题讨论】:

  • 记住你也有 SSHnet sshnet.codeplex.com 这是对基于 java 的sharpSSH 的一个相当大的改进
  • 我试了一下,连接不上。我调用 sftp = New SftpClient("server", "sftptest", "sftptest") 这是 SftpClient。然后,我执行 sftp.Connect()。它失败了。我得到了net 4.0 dll版本。我收到消息错误:找不到合适的身份验证方法来完成身份验证。
  • 您有要连接的主机吗?只是为了确保使用腻子并连接以检查连接是否存在。 SftpClient sftp = New SftpClient(string IP, string Username, string Password); sftp.Connect();
  • 我用腻子试过了,它工作正常...任何其他提示:)
  • 我发现我必须激活键盘交互身份验证。我找不到解决办法。

标签: c# .net vb.net sftp sharpssh


【解决方案1】:

这是我应该做的(vb.net 代码)与THIS library (SSHnet) 建立连接,我确实没有使用 SharpSHH:

Private Sub ButtonAction_Click(sender As Object, e As System.EventArgs) Handles ButtonAction.Click

    Dim PasswordConnection = New PasswordAuthenticationMethod("test", "test")
    Dim KeyboardInteractive = New KeyboardInteractiveAuthenticationMethod("test")
    Dim ConnectionInfo = New ConnectionInfo("192.168.1.1", 22, "test", PasswordConnection, KeyboardInteractive)

    AddHandler KeyboardInteractive.AuthenticationPrompt, _
    Sub(_sender As Object, _e As Renci.SshNet.Common.AuthenticationPromptEventArgs)
        For Each prompt In _e.Prompts
            Debug.Print(prompt.Request)
            If Not prompt.Request.IndexOf("Password:", StringComparison.InvariantCultureIgnoreCase) = -1 Then
                prompt.Response = "test"
            End If
        Next
    End Sub

    sftp = New SftpClient(ConnectionInfo)
    sftp.Connect()

    sftp.disconnect()
End Sub

【讨论】:

  • 我使用了免费的 SSH.NET,但最终还是使用了component pro sftp,因为 SSH.NET 缺乏一些高级功能,我们需要快速支持。
【解决方案2】:

这个库充满了错误。我在 11/2012 下载了版本,即使使用像断开连接这样的简单功能,我也遇到了很大的问题。应用程序将冻结,您必须重新启动它。

【讨论】:

  • “这个库...”是?哪一个?
  • SharpSSH 充满了 bug。使用 SSH.NET
【解决方案3】:

我无法理解您到底想要什么,所以这里是来自 SSH.NET 包的示例代码。 (不是 SharpSSH)

string IP = "192.168.1.1", User = "Testuser", Pass = "123";
SftpClient sftp;

private void UploadFileSFTP()
    {
        sftp = new SftpClient(IP, User, Pass);
        sftp.Connect();
        Uploader();
        Downloader();
        sftp.Disconnect();
    }

string FilePath="C:\\folder\\", Filename = "Filename.extention", 
       DeliveryPath = "/tmp/";

private void Uploader()
    {
        using (var file = File.OpenRead(FilePath + Filename))
        {
            sftp.UploadFile(file, DeliveryPath + Filename);
        }
    }

//there is possibly a simpler way to download but this is how i did it.
string FromPath = "/tmp/testfile.txt", StoragePath = ""; 
private void Downloader()
    {
        if (File.Exists(StoragePath))
            File.Delete(StoragePath);
        if (!Directory.GetDirectories(Path.GetTempPath()).Contains("WorkFiles"))
        {
            Directory.CreateDirectory(Path.GetTempPath() + "WorkFiles");
        }

        StoragePath = Path.GetTempPath() + "WorkFiles\\testFile.txt";

        Int64 iSize = sftp.ReadAllBytes(FromPath).Length;
        Int64 iRunningByteTotal = 0;
        using (Stream streamRemote = sftp.OpenRead(FromPath))
        {
            using (Stream streamLocal = new FileStream(StoragePath, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                int iByteSize = 0;
                byte[] byteBuffer = new byte[iSize];
                while ((iByteSize = streamRemote.Read(byteBuffer, 0, byteBuffer.Length)) > 0)
                {
                    streamLocal.Write(byteBuffer, 0, iByteSize);
                    iRunningByteTotal += iByteSize;
                }
            }
        }
    }

【讨论】:

  • 我找到了解决方案:here,我必须设置一个键盘交互身份验证。我有 c# 代码,但我无法将其翻译成 vb.net,哈哈。
  • 我不能发布我的答案,因为我是新手,我没有足够的声誉,换句话说,我是一个菜鸟:p。
  • 我想知道为什么他们在这个例子中不使用 sftp.DownloadFile() ?
  • 我没有仅仅因为这是我放置的一段代码。
猜你喜欢
  • 2013-08-31
  • 1970-01-01
  • 2023-04-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
相关资源
最近更新 更多