วิธีการดึงไฟล์จากเซิร์ฟเวอร์ผ่าน SFTP ใน Java

หากคุณกำลังทำงานในโปรเจ็กต์ Java และต้องการดาวน์โหลดไฟล์อย่างปลอดภัยจากเซิร์ฟเวอร์ระยะไกล การใช้ SFTP (SSH File Transfer Protocol) เป็นหนึ่งในตัวเลือกที่ดีที่สุดที่มีอยู่ เนื่องจาก SFTP ให้วิธีการถ่ายโอนไฟล์อย่างปลอดภัยโดยไม่เปิดเผยข้อมูลที่ละเอียดอ่อนของคุณ ในโพสต์นี้ เราจะแนะนำคุณในการดึงไฟล์จากเซิร์ฟเวอร์โดยใช้ไลบรารี JSch ของ Java

ทำไมต้องใช้ SFTP?

ข้อดีหลัก:

  • ความปลอดภัย: เข้ารหัสทั้งคำสั่งและข้อมูล ทำให้ไม่ส่งข้อมูลที่ละเอียดอ่อนในรูปแบบที่ชัดเจน
  • การตรวจสอบสิทธิ์: รองรับทั้งการตรวจสอบสิทธิ์ด้วยชื่อผู้ใช้/รหัสผ่านและการตรวจสอบสิทธิ์ด้วยใบรับรอง เพิ่มความยืดหยุ่น
  • ฟีเจอร์ SSH: ใช้ฟีเจอร์ SSH2 ทั้งหมด เพื่อเพิ่มความปลอดภัยและความน่าเชื่อถือ

เริ่มต้นกับ JSch

JSch คืออะไร?

JSch เป็นไลบรารี Java ยอดนิยมที่ช่วยให้คุณเชื่อมต่อกับเซิร์ฟเวอร์ SSH และเรียกใช้คำสั่งหรือถ่ายโอนไฟล์ มันถูกใช้ในโครงการโอเพ่นซอร์สจำนวนมาก ทำให้เป็นตัวเลือกที่น่าเชื่อถือสำหรับนักพัฒนา

การติดตั้ง JSch

ในการเริ่มต้น คุณจะต้องดาวน์โหลดไลบรารี JSch คุณสามารถหามันได้ที่ เว็บไซต์ทางการของ JCraft เมื่อติดตั้งไลบรารีในโปรเจ็กต์ของคุณแล้ว คุณสามารถดำเนินการเขียนโค้ดได้

คู่มือทีละขั้นตอนในการดึงไฟล์ผ่าน SFTP

นี่คือตัวอย่างการนำรหัสพื้นฐานมาใช้เพื่อเริ่มการดึงไฟล์จากเซิร์ฟเวอร์ระยะไกลโดยใช้ SFTP ใน Java

ขั้นตอนที่ 1: เริ่มต้น JSch และตั้งค่าการเชื่อมต่อ

JSch jsch = new JSch();
String knownHostsFilename = "/home/username/.ssh/known_hosts";
jsch.setKnownHosts(knownHostsFilename);

Session session = jsch.getSession("remote-username", "remote-host");
  • การเริ่มต้น JSch: สร้างอินสแตนซ์ของ JSch
  • Known Hosts: ตั้งค่าไฟล์ known hosts สำหรับการตรวจสอบกุญแจ

ขั้นตอนที่ 2: การตรวจสอบสิทธิ์

คุณมีสองตัวเลือกสำหรับการตรวจสอบสิทธิ์ คือตัวเลือกแบบโต้ตอบหรือตัวเลือกที่ไม่โต้ตอบ

ตัวเลือกแบบโต้ตอบ

คุณสามารถนำเสนออินเตอร์เฟซ UserInfo เพื่อจัดการการโต้ตอบของผู้ใช้ในเรื่องข้อมูลรับรองการเข้าสู่ระบบ:

UserInfo ui = new MyUserInfo();
session.setUserInfo(ui);

ตัวเลือกที่ไม่โต้ตอบ

นี่เป็นวิธีที่ง่ายกว่าหากไฟล์ known hosts ของคุณมีคีย์ที่จำเป็น:

session.setPassword("remote-password");

ขั้นตอนที่ 3: เชื่อมต่อและเปิดช่อง SFTP

session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
  • เชื่อมต่อกับเซสชันและตั้งช่อง SFTP

ขั้นตอนที่ 4: ดึงไฟล์

ตอนนี้คุณพร้อมที่จะดึงไฟล์ของคุณ:

sftpChannel.get("remote-file", "local-file");
// หรือสำหรับการประมวลผลสตรีมข้อมูล
InputStream in = sftpChannel.get("remote-file");
// ประมวลผลสตรีมข้อมูลตามต้องการ

ขั้นตอนที่ 5: ทำความสะอาด

อย่าลืมออกจากช่อง SFTP และตัดการเชื่อมต่อเซสชันเพื่อประหยัดทรัพยากร:

sftpChannel.exit();
session.disconnect();

สรุป

การใช้ SFTP เพื่อดึงไฟล์ใน Java นั้นง่ายดายเมื่อคุณใช้ไลบรารี JSch โดยการปฏิบัติตามขั้นตอนที่ outline ไว้ในคู่มือนี้ คุณควรสามารถสร้างการเชื่อมต่อที่ปลอดภัยและดาวน์โหลดไฟล์ได้อย่างง่ายดาย อย่าลืมว่าการจัดการข้อผิดพลาดที่ถูกต้องมีความสำคัญ ดังนั้นให้พิจารณาการดำเนินการตรวจสอบข้อผิดพลาดเมื่อคุณปรับปรุงโค้ดของคุณ

ตอนนี้คุณมีความรู้เพียงพอในการดึงไฟล์อย่างปลอดภัยจากเซิร์ฟเวอร์โดยใช้ SFTP ใน Java—ขอให้สนุกกับการเขียนโค้ด!