C# 如何使用SharpSSH将文件上载到SFTP服务器

C# 如何使用SharpSSH将文件上载到SFTP服务器,c#,sftp,sharpssh,C#,Sftp,Sharpssh,我想使用SharpSSH将文件上载到SFTP服务器 我得到了SharpSSH.dll,要上传的文件,一个公钥,然后我将私钥发送到服务器。他们给了我一个用户名,不需要密码 我试过这个: Sftp sftp = new Sftp(ip, user); sftp.Connect(); sftp.Put(filePath, toPath); sftp.Cancel(); 我是否需要这里的某个地方的主机密钥?如果需要,我必须将其放入何处,以及如何从.ppk文件中制作一个主机密钥?首先,您的关键术语是背对

我想使用SharpSSH将文件上载到SFTP服务器

我得到了
SharpSSH.dll
,要上传的文件,一个公钥,然后我将私钥发送到服务器。他们给了我一个用户名,不需要密码

我试过这个:

Sftp sftp = new Sftp(ip, user);
sftp.Connect();
sftp.Put(filePath, toPath);
sftp.Cancel();

我是否需要这里的某个地方的主机密钥?如果需要,我必须将其放入何处,以及如何从
.ppk
文件中制作一个主机密钥?

首先,您的关键术语是背对背的,或者至少我希望是这样。您发送公钥,并确保私钥的安全

除此之外,是的,使用SharpSSH您需要包含私钥位置

sftp.AddIdentityFile("path/to/identity/file");
如果您的密钥有密码,则使用重载版本,即

sftp.AddIdentityFile("path/to/file", "password");
我认为,密钥文件本身需要采用OpenSSH格式

我也不确定您是否包含sftp.Cancel(); 将连接和命令放入try/catch/finally块并在finally块中调用
sftp.close()
不是更好吗?

以下是我的解决方案:

using Tamir.SharpSsh;
using Tamir.SharpSsh.jsch;
方法代码:

public static bool SftpFile(string ftpAddress, string username, string password, string port, string folderPath, string filename, string separator, string keyFilename, string keyPassword)
{
    bool Success = false;
    Sftp sftp = null;
    try
    {

        if (filename.Length > 0 && dt != null)
        {
            //Send file

            int NumberOfConnectionAttempts = 0;

        JumpPoint:

            try
            {
                sftp = new Sftp(ftpAddress, username);

                sftp.Password = password;

                sftp.AddIdentityFile(keyFilename, keyPassword);

                // non-password alternative is sftp.AddIdentityFile(keyFilename);

                sftp.Connect();

                sftp.Put(filename + ".csv", (!String.IsNullOrWhiteSpace(folderPath) ? folderPath + "/" : "") + filename + ".csv");

                Success = true;

            }
            catch (Exception ex)
            {
                Program.DisplayText(" Connection " + NumberOfConnectionAttempts + " failed.\n");

                if (NumberOfConnectionAttempts < Program.IntTotalAllowedConnectionAttempts)
                {
                    NumberOfConnectionAttempts++;

                    Thread.Sleep(1000);

                    goto JumpPoint;

                }
                else
                {
                    //Program.HandleException(ex);

                }
            }
        }

    }
    catch (Exception ex)
    {
        //Program.HandleException(ex);
    }
    finally
    {
        //Close sftp

        try { sftp.Close(); }
        catch { }

        try { sftp = null; }
        catch { }

        try { GC.Collect(); }
        catch { }

    }
    return Success;
}

嗨,sftp的格式是什么?我已连接到我的sftp服务器,但我无法上载到服务器中的特定文件夹我想你的意思是你将公钥上载到服务器上,并将私钥保留在运行C#代码的机器上。
string FtpAddress = "??.??.??.??";

string Port = "21";

string Username = "my-username";

string Password = "P455w0rd";

string FolderPath = "folder-name\\"; 

string Filename = "filename.foo";

string KeyFilename = "keyFilename.bar";

string KeyPassword= "K3yP455w0rd";

if (SftpFile(FtpAddress, Username, Password, Port, FolderPath, Filename, ",", KeyFilename, KeyPassword))
{
    /* Success */

}
else
{
    /* Error */

}