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; } }