Gửi và nhận SFTP trên .NET

Ngày tạo trang :

Môi trường

Visual Studio
  • Visual Studio Community 2017
  • Visual Studio Community 2019
.NET Core
  • 3.1
.NET Framework
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

* Nó áp dụng cho các phiên bản khác, nhưng chưa được xác nhận

Bắt đầu

Tạo một chương trình khách hàng để gửi và nhận các tập tin SFTP trong khung .NET (.NET Core). Các thủ tục liên quan đến SFTP không phải là một chương trình tiêu chuẩn .NET. Ở đây chúng tôi sử dụng thư viện của bên thứ ba SSH.NET.

SSH.NET không được cập nhật gần đây, nhưng chương trình có thể được thực hiện tương đối dễ dàng Bởi vì nó cũng hỗ trợ các tiêu chuẩn .NET, tôi nghĩ rằng việc sử dụng không có nhiều nhược điểm.

Lần này, bạn sẽ gửi và nhận tệp bằng SFTP trong dự án bảng điều khiển cốt lõi .NET. SSH.NET hỗ trợ nhiều khuôn khổ và do đó có thể được thực hiện trong các dự án bên ngoài bảng điều khiển.

Chuẩn bị trước

  • Studio trực quan đã được cài đặt
  • Bạn có một máy chủ SFTP để kiểm tra cách SFTP hoạt động
  • Tài khoản đã sẵn sàng để kết nối với SFTP
  • Bật xác thực mật khẩu trên máy chủ SFTP để thực hiện xác thực mật khẩu
  • Khi thực hiện xác thực khóa công khai, hãy đặt khóa công khai trên máy chủ SFTP và chuẩn bị khóa riêng để tải vào máy khách (định dạng OpenSSH)

Cài đặt SSH.NET

Tạo dự án bảng điều khiển cốt lõi .NET trong Vision Studio. Đặt tên dự án là "SshNetBasic".

Nhận SSH.NET từ NuGet.

image

image

image

image

Gói đã được thêm vào.

image

Xác thực mật khẩu

Đối với xác thực mật khẩu, hãy sử dụng lớp phương pháp xác thực mật khẩu để đặt tên người dùng và mật khẩu.

Đặt tên máy chủ (chẳng hạn như sorceryforce.net và 192.168.0.1) trong lớp Thông tin Kết nối, cũng như phương pháp xác thực vừa được tạo. Chuyển sang lớp "Khách hàng Sftp".

Sử dụng phương pháp SftpClient.Connect để thực sự kết nối, nếu thành công, sau đó hành động tiếp theo, nếu không thành công, kích hoạt ngoại lệ. Sử dụng phương pháp Khám phá để ngắt kết nối.

// 必要な情報を設定する
var host = "";
var userName = "";
var password = "";

// 認証メソッドを作成
var authMethod = new Renci.SshNet.PasswordAuthenticationMethod(userName, password);

// 接続情報を作成
var connectionInfo = new Renci.SshNet.ConnectionInfo(host, userName, authMethod);

// SFTP クライアントを作成
var client = new Renci.SshNet.SftpClient(connectionInfo);

// 接続。失敗した場合は例外が発生
client.Connect();

// 切断
client.Disconnect();

Xác thực khóa công khai

Đặt khóa riêng trong bất kỳ thư mục nào của khách hàng. Như bạn đã đề cập trong mẹo thiết lập, nếu bạn đặt khóa riêng trong một thư mục có thể truy cập tài khoản khác, Thao tác SFTP có thể thất bại. Đảm bảo rằng chỉ tài khoản hoặc quản trị viên bạn đang chạy mới có thể truy cập tài khoản đó.

image

Không giống như xác thực mật khẩu, phương pháp xác thực đã được thay đổi thành phương pháp xác thực khóa riêng.

Đối số thứ hai là tệp khóa riêng và chỉ định đường dẫn tệp và mật khẩu nơi khóa riêng nằm, nếu được thiết lập.

// 必要な情報を設定する
var host = "";
var userName = "";
var passPhrase = "";
var keyFilePath = @"C:\xxxxxxxxxx\id_rsa";

// 認証メソッドを作成
var authMethod = new Renci.SshNet.PrivateKeyAuthenticationMethod(userName,
                      new Renci.SshNet.PrivateKeyFile(keyFilePath, passPhrase));

// 接続情報を作成
var connectionInfo = new Renci.SshNet.ConnectionInfo(host, userName, authMethod);

// SFTP クライアントを作成
var client = new Renci.SshNet.SftpClient(connectionInfo);

// 接続。失敗した場合は例外が発生
client.Connect();

// 切断
client.Disconnect();

Sử dụng SFTP để gửi và nhận tệp

Sau khi kết nối với máy chủ bằng cách sử dụng phương pháp SftpClient.Connect, hãy viết mã gửi và nhận để gửi và nhận tệp. Những gì tôi đã làm là "đọc các tập tin địa phương và gửi nó đến máy chủ SFTP" và "tải về các tập tin từ máy chủ SFTP và lưu chúng cục bộ.". Nó có thể được thực hiện mà không cần viết xử lý đặc biệt khó khăn.

Bạn có thể gửi và nhận tên tệp tiếng Nhật mà không gặp vấn đề gì.

/* ---------------- 中略 ------------------- */

var sendFilePath = @"C:\xxxxxxxxxxxx\テスト.txt";
var reseiveFilePath = @"C:\xxxxxxxxxxxx\テスト2.txt";

/* ---------------- 中略 ------------------- */

// 接続。失敗した場合は例外が発生
client.Connect();

// ファイルのアップロード(上書き)
using var sendStream = File.OpenRead(sendFilePath);
client.UploadFile(sendStream, Path.GetFileName(sendFilePath), true);

// ファイルのダウンロード(上書き)
using var reseiveStream = File.OpenWrite(reseiveFilePath);
client.DownloadFile(Path.GetFileName(sendFilePath), reseiveStream);

// 切断
client.Disconnect();

Tóm tắt

SSH.NET làm cho việc gửi và nhận SFTP dễ dàng hơn. Thiết lập môi trường thử nghiệm có thể mất nhiều thời gian hơn để thực hiện chương trình.

Xử lý SFTP về cơ bản giống như FTP, SSH.NET nhưng hầu hết các hoạt động đã được thực hiện. Nếu bạn muốn sử dụng SFTP một cách lập trình, chúng tôi khuyên bạn nên sử dụng thư viện.