0

SFTP接続を処理するための.net用の無料のDLLを探していました。

このプロジェクト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マシン上にあることを言及するだけです。

ありがとうございました。

4

3 に答える 3

6

このライブラリ(SSHnetとの接続を確立するために私がすべきこと(vb.netコード)は次のとおりです。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
于 2012-08-03T12:29:00.723 に答える
1

このライブラリにはバグがたくさんあります。2012年11月にバージョンをダウンロードしましたが、Disconnectのような単純な機能でも大きな問題があります。アプリケーションがフリーズし、再起動する必要があります。

于 2012-11-26T09:40:37.510 に答える
0

正確に何が必要かを理解するのに問題があるので、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;
                }
            }
        }
    }
于 2012-08-02T17:40:38.027 に答える