ส่งและรับ SFTP บน .NET
สภาพแวดล้อม
- Visual Studio
-
- Visual Studio Community 2017
- Visual Studio Community 2019
- .NET Core
-
- 3.1
- .NET Framework
-
- 4
- 4.8
- SSH.NET
-
- 2016.1.0
* มันสามารถใช้ได้กับรุ่นอื่น ๆ แต่ยังไม่ได้ยืนยัน
เริ่มต้นใช้งาน
สร้างโปรแกรมไคลเอ็นต์เพื่อส่งและรับไฟล์ SFTP ใน .NET Framework (.NET Core) โปรแกรมที่เกี่ยวข้องกับ SFTP ไม่ใช่โปรแกรมมาตรฐาน .NET ที่นี่เราใช้ห้องสมุดของบุคคลที่สามSSH.NET
SSH.NET ไม่ได้รับการปรับปรุงเมื่อเร็ว ๆ นี้ แต่โปรแกรมสามารถดําเนินการค่อนข้างง่าย เนื่องจากยังสนับสนุนมาตรฐาน .NET ผมคิดว่าไม่มีข้อเสียมากในการใช้งาน
เวลานี้ คุณจะส่งและรับแฟ้มโดยใช้ SFTP ในโครงการคอนโซลหลัก .NET SSH.NET สนับสนุนกรอบงานจํานวนมากเพื่อให้สามารถดําเนินการในโครงการนอกคอนโซล
เตรียมตัวให้พร้อม
- สตูดิโอภาพได้รับการติดตั้ง
- คุณมีเซิร์ฟเวอร์ SFTP เพื่อตรวจสอบวิธีการทํางานของ SFTP
- พร้อมที่จะใช้บัญชีที่เชื่อมต่อด้วย SFTP
- เปิดใช้งานการรับรองความถูกต้องของรหัสผ่านบนเซิร์ฟเวอร์ SFTP เพื่อดําเนินการรับรองความถูกต้องของรหัสผ่าน
- เมื่อดําเนินการรับรองความถูกต้องคีย์สาธารณะ ให้วางคีย์สาธารณะบนเซิร์ฟเวอร์ SFTP และเตรียมคีย์ส่วนตัวที่จะโหลดลงในไคลเอ็นต์ (รูปแบบ OpenSSH)
ติดตั้ง SSH.NET
สร้างโครงการคอนโซลหลัก .NET ใน Visual Studio ตั้งชื่อโครงการว่า "SshNetBasic"
รับ SSH.NET จาก NuGet
มีการเพิ่มแพคเกจแล้ว
การรับรองความถูกต้องของรหัสผ่าน
สําหรับการรับรองความถูกต้องของรหัสผ่าน ให้ใช้คลาสวิธีการรับรองความถูกต้องของรหัสผ่านเพื่อตั้งค่าชื่อผู้ใช้และรหัสผ่าน
ตั้งค่าชื่อโฮสต์ (เช่น sorceryforce.net และ 192.168.0.1) คลาส ข้อมูลการเชื่อมต่อ และวิธีการรับรองความถูกต้องที่เพิ่งสร้าง ส่งผ่านไปยังคลาส "ไคลเอ็นต์ Sftp"
ใช้วิธี SftpClient.Connect เพื่อเชื่อมต่อจริง และถ้าสําเร็จ ให้ดําเนินการถัดไป และข้อยกเว้นถูกยกมาถ้าล้มเหลว ใช้วิธีการค้นพบเพื่อยกเลิกการเชื่อมต่อ
// 必要な情報を設定する
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();
การรับรองความถูกต้องของคีย์สาธารณะ
ใส่คีย์ส่วนตัวในโฟลเดอร์ใดๆ ของไคลเอ็นต์ ดังที่คุณได้กล่าวไว้ในเคล็ดลับการตั้งค่าหากคุณใส่คีย์ส่วนตัวในโฟลเดอร์ที่สามารถเข้าถึงบัญชีอื่นได้ การดําเนินการ SFTP อาจล้มเหลว ตรวจสอบให้แน่ใจว่ามีเพียงบัญชีหรือผู้ดูแลระบบที่คุณเรียกใช้เท่านั้นที่สามารถเข้าถึงได้
ซึ่งแตกต่างจากการรับรองความถูกต้องของรหัสผ่าน วิธีการรับรองความถูกต้องถูกเปลี่ยนเป็น วิธีการรับรองความถูกต้องคีย์ส่วนตัว
พารามิเตอร์ที่สองคือ "ไฟล์คีย์ส่วนตัว" และระบุเส้นทางไฟล์และรหัสผ่านที่คีย์ส่วนตัวตั้งอยู่ (ถ้ามีการตั้งค่า)
// 必要な情報を設定する
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();
ใช้ SFTP เพื่อส่งและรับไฟล์
เมื่อคุณเชื่อมต่อกับเซิร์ฟเวอร์โดยใช้วิธีการ SftpClient.Connect ให้เขียนรหัสการส่งและรับเพื่อส่งและรับไฟล์ สิ่งที่ฉันทําคือ "อ่านไฟล์ภายในเครื่องและส่งไปยังเซิร์ฟเวอร์ SFTP" และ "ดาวน์โหลดไฟล์จากเซิร์ฟเวอร์ SFTP และบันทึกลงในเครื่อง" สามารถทําได้โดยไม่ต้องเขียนการจัดการที่ยากโดยเฉพาะอย่างยิ่ง
คุณสามารถส่งและรับชื่อไฟล์ภาษาญี่ปุ่นโดยไม่มีปัญหาใด ๆ
/* ---------------- 中略 ------------------- */
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();
สรุป
SSH.NET ทําให้การส่งและรับ SFTP ง่ายขึ้น การตั้งค่าสภาพแวดล้อมการทดสอบอาจใช้เวลานานกว่าการใช้โปรแกรม
การประมวลผล SFTP โดยทั่วไปจะเหมือนกับ FTP SSH.NET แต่การดําเนินการส่วนใหญ่ได้รับการดําเนินการ ถ้าคุณต้องการใช้ SFTP โดยทางโปรแกรม ขอแนะนําให้ใช้ไลบรารี