1、SSH.NET安装引用
1)使用Nuget命令安装
Install-Package SSH.NET -Version 2016.0.0
2)使用 Nuget 管理工具搜索 "SSH.NET" => 找到选择安装
相关文档:VS(Visual Studio)中Nuget的使用
2)使用.Net CLI安装
dotnet add package SSH.NET --version 2016.0.0
2、使用密码和公钥验证建立SFTP连接
var connectionInfo = new ConnectionInfo("sftp.foo.com",
                                        "guest",
                                        new PasswordAuthenticationMethod("guest", "pwd"),
                                        new PrivateKeyAuthenticationMethod("rsa.key"));
using (var client = new SftpClient(connectionInfo))
{
    client.Connect();
}3、验证主机标识
使用用户名和密码建立SSH连接,如果服务器的指纹与预期的指纹不匹配,则拒绝连接:
byte[] expectedFingerPrint = new byte[] {
                                            0x66, 0x31, 0xaf, 0x00, 0x54, 0xb9, 0x87, 0x31,
                                            0xff, 0x58, 0x1c, 0x31, 0xb1, 0xa2, 0x4c, 0x6b
                                        };
using (var client = new SshClient("sftp.foo.com", "guest", "pwd"))
{
    client.HostKeyReceived += (sender, e) =>
        {
            if (expectedFingerPrint.Length == e.FingerPrint.Length)
            {
                for (var i = 0; i < expectedFingerPrint.Length; i++)
                {
                    if (expectedFingerPrint[i] != e.FingerPrint[i])
                    {
                        e.CanTrust = false;
                        break;
                    }
                }
            }
            else
            {
                e.CanTrust = false;
            }
        };
    client.Connect();
}
4、使用SSH.NET上传文件
通过 SSH.NET 实现文件上传,代码如下,
using Renci.SshNet;
public static class SendFileToServer
{
    private static string host = "127.0.0.1";
    private static string username = "sftp";
    private static string password = "12345";
    public static int Upload(string fileName)
    {    
        var connectionInfo = new ConnectionInfo(host, "sftp", new PasswordAuthenticationMethod(username, password));
        // Upload File
        using (var sftp = new SftpClient(connectionInfo)){
            sftp.Connect();
            //sftp.ChangeDirectory("/MyFolder");
            using (var uplfileStream = System.IO.File.OpenRead(fileName)){
                sftp.UploadFile(uplfileStream, fileName, true);
            }
            sftp.Disconnect();
        }
        return 0;
    }
}
5、使用SSH.NET下载文件
通过 SSH.NET 实现文件下载,代码如下,
using Renci.SshNet;
public static class DownloadFileToServer
{
    private static string host = "127.0.0.1";
    private static string username = "sftp";
    private static string password = "12345";
    public static int Download(string fileName)
    {    
        var connectionInfo = new ConnectionInfo(host, "sftp", new PasswordAuthenticationMethod(username, password));
        // Upload File
        using (var sftp = new SftpClient(connectionInfo)){
            sftp.Connect();
            //sftp.ChangeDirectory("/MyFolder");
            using (var fileStream = System.IO.File.OpenWrite(fileName)){
                sftp.DownloadFile(fileName, fileStream);
            }
            sftp.Disconnect();
        }
        return 0;
    }
}