คนส่วนใหญ่ชอบโปรแกรมอรรถประโยชน์ เช่น FileZilla, WinSCP หรือโปรแกรม FTP อื่นๆ เมื่อต้องการถ่ายโอนไฟล์ไปยังหรือจากเซิร์ฟเวอร์ Linux SFTP เป็นทางเลือกที่ปลอดภัยสำหรับโปรโตคอล FTP ดั้งเดิม มันทำหน้าที่เหมือนกับเวอร์ชันที่ไม่ปลอดภัยเป็นส่วนใหญ่ แต่มีการเพิ่มชั้นของการเข้ารหัส เพื่อให้บรรลุสิ่งนี้ จะใช้โปรโตคอล SSH ที่มีความสามารถเข้ารหัส การตั้งค่าเซิร์ฟเวอร์ SFTP บนระบบ Linux ของคุณมีหลายขั้นตอน ซึ่งเราจะนำเสนอที่นี่
SFTP คืออะไร
SFTP (Secure File Transfer Protocol) เป็นโปรโตคอลเครือข่ายสำหรับการถ่ายโอนไฟล์จากไคลเอนต์ไปยังเซิร์ฟเวอร์ ไม่เหมือนกับ FTP (File Transfer Protocol) SFTP ใช้โปรโตคอล SSH (Secure Shell) เพื่อเข้ารหัสข้อมูลที่ส่ง ได้รับการพัฒนาโดยนักวิทยาศาสตร์คอมพิวเตอร์ Tatu Ylönen และ Sami Lehtinen ซึ่งรับผิดชอบในการพัฒนาโปรโตคอล SSH ในปี 1990 ด้วย อย่างไรก็ตาม เวอร์ชันใหม่นี้ได้รับการพัฒนาโดย IETF (Internet Engineering Task Force)
สามารถอธิบายได้ว่าเป็นโปรโตคอลระบบไฟล์ระยะไกล แม้ว่าชื่อจะแนะนำว่าดำเนินการถ่ายโอนไฟล์เท่านั้น เมื่อส่งไฟล์โดยใช้ SFTP จากไคลเอนต์ไปยังเซิร์ฟเวอร์ที่รับ ข้อมูลจะถูกเข้ารหัสก่อนที่จะส่งไปยังปลายทาง หากข้อมูลที่ส่งไปถูก "คนกลาง" สกัดกั้น บุคคลที่สามนี้จะไม่สามารถถอดรหัสได้อย่างง่ายดาย
การติดตั้ง SSH และเซิร์ฟเวอร์ OpenSSH
เรากำลังเริ่มขั้นตอนการตั้งค่าเซิร์ฟเวอร์ SFTP โดยการติดตั้ง SSH และเซิร์ฟเวอร์ OpenSSH
การติดตั้ง Linux ส่วนใหญ่มี SSH ติดตั้งอยู่แล้วโดยค่าเริ่มต้น แต่ในกรณีที่ระบบของคุณไม่มี คุณสามารถติดตั้งได้โดยใช้ apt
ของ Advanced Packaging Tool คำสั่ง:
sudo apt install ssh
หลังจากติดตั้ง SSH แล้ว คุณสามารถตรวจสอบเวอร์ชันได้โดยเรียกใช้ ssh
คำสั่งด้วย -V
ธง:
ssh -V
คุณสามารถติดตั้งเซิร์ฟเวอร์ OpenSSH บนระบบ Debian และ Ubuntu ได้ ตัวอย่างเช่น โดยใช้ apt
คำสั่ง:
sudo apt install openssh-server
คุณสามารถทำเช่นเดียวกันบน Arch Linux โดยใช้ pacman
คำสั่ง:
sudo pacman -S openssh
การสร้างผู้ใช้ กลุ่ม และไดเรกทอรีสำหรับ SFTP
เป็นคำแนะนำทั่วไปที่บริการต่างๆ บน Linux ควรใช้ผู้ใช้ กลุ่ม และไดเรกทอรีของตนเอง
เริ่มต้นด้วยการสร้างกลุ่มสำหรับผู้ใช้ SFTP ทำได้โดยใช้ groupadd
คำสั่ง:
sudo groupadd sftp_group
คุณสามารถสร้างผู้ใช้และเพิ่มลงในกลุ่มที่สร้างโดยใช้ useradd
คำสั่งและ -g
ธงซึ่งใช้ในการระบุกลุ่มที่ผู้ใช้จะเป็นส่วนหนึ่งของ:
sudo useradd -g sftp_group sftp_user
หลังจากสร้างผู้ใช้แล้ว ให้กำหนดรหัสผ่านโดยใช้ passwd
คำสั่ง:
sudo passwd sftp_user
สร้างไดเร็กทอรีเริ่มต้นสำหรับผู้ใช้ที่สร้างขึ้นใหม่:
sudo mkdir -p /data/sftp_user/uploaded_files
ใช้ chown
คำสั่งให้สิทธิ์ที่จำเป็นแก่ไดเร็กทอรี:
sudo chown -R root:sftp_group /data/sftp_user sudo chown -R sftp_user:sftp_group /data/sftp_user/uploaded_files
การกำหนดค่าเซิร์ฟเวอร์ SSH
ขั้นตอนต่อไปสำหรับการตั้งค่าเซิร์ฟเวอร์ SFTP คือการกำหนดค่าเซิร์ฟเวอร์ SSH ที่จะใช้
แก้ไขไฟล์ “sshd_config” ที่พบใน “/etc/ssh/” เพื่อให้ผู้ใช้ใช้เชลล์ SFTP เมื่อเชื่อมต่อกับเซิร์ฟเวอร์แทนเชลล์ของ SSH
คุณแก้ไขไฟล์ได้ง่ายๆ โดยใช้ตัวแก้ไข Nano ที่ใช้กันทั่วไปซึ่งพบในการติดตั้ง Linux หลายตัวตามค่าเริ่มต้น:
sudo nano /etc/ssh/sshd_config
ค้นหาด้านล่างของไฟล์และเพิ่มสิ่งต่อไปนี้:
Match Group sftp_group ChrootDirectory /data/%u ForceCommand internal-sftp
เริ่มบริการ SSH:
sudo systemtl restart sshd
(ไม่บังคับ) การเปลี่ยนพอร์ต SFTP
หากคุณต้องการเปลี่ยนพอร์ตที่เซิร์ฟเวอร์ SFTP ใช้จากค่าเริ่มต้น 22 เป็นตัวเลือกที่คุณเลือก คุณจะต้องแก้ไขไฟล์ “sshd_config” อีกครั้ง
แก้ไขไฟล์อีกครั้งโดยใช้โปรแกรมแก้ไข Nano:
sudo nano /etc/ssh/sshd_config
ค้นหาบรรทัดในไฟล์ที่มีค่าพอร์ตเริ่มต้นเป็น 22 แสดงความคิดเห็น:
#Port 22
คุณสามารถลบเครื่องหมายแฮช (#) ที่ใช้แสดงความเห็นในบรรทัดและเพิ่มค่าพอร์ตที่คุณเลือกได้ ในกรณีของฉัน ฉันกำลังเปลี่ยนค่าเป็น 1111:
Port 1111
ตอนนี้เพียงแค่บันทึกไฟล์
และรีสตาร์ทเซิร์ฟเวอร์:
sudo systemctl restart sshd
การเข้าสู่ระบบและการใช้เซิร์ฟเวอร์
W เซิร์ฟเวอร์ที่ติดตั้งและกำหนดค่าก็พร้อมใช้งาน คุณสามารถอัปโหลดไฟล์และดาวน์โหลดไฟล์ได้อย่างง่ายดาย ทั้งหมดนี้ด้วยเซสชันที่เข้ารหัสโดย SSH
ก่อนเข้าสู่ระบบ จะไม่เสียหายหากต้องดูคู่มือที่ให้มา:
sftp -h
เข้าสู่ระบบเซิร์ฟเวอร์โดยระบุชื่อผู้ใช้และ IP ของเซิร์ฟเวอร์หรือชื่อโฮสต์ในรูปแบบต่อไปนี้:
sftp USER@HOST
นอกจากนี้ คุณสามารถระบุพอร์ตที่เซิร์ฟเวอร์ SFTP ของคุณใช้อยู่ (ค่าเริ่มต้นคือ 22) โดยใช้ -P
ธง:
sftp USER@HOST -P <PORT>
เมื่อคุณเข้าสู่ระบบ คุณจะได้รับการต้อนรับด้วยเชลล์ SFTP
ดูคู่มือโดยพิมพ์ help
.
กำลังดาวน์โหลดไฟล์
ในการดาวน์โหลดไฟล์:
get /path/to/file/on/server
ตัวอย่าง:
get /bin/ls
การดำเนินการนี้จะดาวน์โหลดไปยังไดเร็กทอรีปัจจุบันของคุณ ซึ่งเป็นไดเร็กทอรีที่คุณเคยอยู่ในเครื่องก่อนที่คุณจะลงชื่อเข้าใช้เซิร์ฟเวอร์ ในการดาวน์โหลดไปยังไดเร็กทอรีท้องถิ่นเฉพาะ:
get /path/to/file/on/server /path/to/local/folder
ในการคัดลอกไดเร็กทอรี คุณต้องเพิ่ม -r
พารามิเตอร์ ซึ่งย่อมาจาก recursive ไปยังคำสั่ง
get -r /bin /home/username/Desktop/bin
อย่าลืมเพิ่มชื่อสำหรับไดเร็กทอรีใหม่ที่คุณต้องการสร้างในเครื่อง เช่น “/home/username/Desktop/bin” ในกรณีนี้ หากคุณใช้ get -r /bin /home/username/Desktop
ไฟล์จะถูกคัดลอกโดยตรงบนเดสก์ท็อป โปรดทราบว่า t เป็นไฟล์ที่คัดลอกมา ไม่ใช่ตัวไดเรกทอรีเอง
กำลังอัปโหลดไฟล์
การอัปโหลดไฟล์หรือไดเร็กทอรีเป็นไปตามหลักการเดียวกัน ข้อยกเว้นเพียงอย่างเดียวคือพาธจะกลับด้าน ซึ่งหมายความว่าคุณต้องระบุไฟล์/ไดเร็กทอรีในเครื่องก่อน จากนั้นจึงระบุพาธระยะไกล
เริ่มต้นด้วยการอัปโหลดไฟล์ไปยังเซิร์ฟเวอร์โดยใช้ put
คำสั่ง:
put /path/to/local/content /path/to/remote/location
เมื่ออัปโหลดไดเร็กทอรี (แบบเรียกซ้ำ) โปรดจำไว้ว่าใช้กฎเดียวกันจากส่วนก่อนหน้านี้:เป็นไฟล์ในไดเร็กทอรีที่คัดลอกและไม่ใช่ตัวไดเร็กทอรีเอง ระบุชื่อใหม่สำหรับไดเร็กทอรีที่คุณต้องการคัดลอกไฟล์เหล่านั้นไป
put -r /home/username/Desktop/bin bin
สิ่งนี้จะสร้างไดเร็กทอรีใหม่ที่เรียกว่า "bin" ที่ด้านระยะไกล
ดำเนินการโอนต่อและใช้เส้นทางที่มีช่องว่าง
เมื่อคุณถ่ายโอนไฟล์ขนาดใหญ่ที่ถูกขัดจังหวะ คุณสามารถดำเนินการต่อโดยแทนที่คำสั่งก่อนหน้าด้วย reput
และ reget
. เพียงให้แน่ใจว่าคุณใช้เส้นทางเดียวกับที่คุณใช้ครั้งล่าสุดเพื่อให้ต้นทางและปลายทางตรงกันทุกประการ
reget /path/to/file/on/server /path/to/local/file reput /path/to/local/file /path/to/file/on/server
หากต้องการดำเนินการถ่ายโอนไดเรกทอรีต่อ เพียงเพิ่ม -r
พารามิเตอร์:
reput -r /home/username/Desktop/bin bin
หากพาธไปยังไฟล์มีช่องว่าง ให้ใส่ในเครื่องหมายคำพูด:
put "/home/username/My Documents/Files"
การใช้งานอื่นๆ
คุณสามารถแสดงรายการไฟล์และไดเร็กทอรีโดยใช้ ls
คำสั่ง:
ls -l
สิทธิ์ของไฟล์ยังสามารถเปลี่ยนแปลงได้โดยใช้ chmod
คำสั่ง:
chmod <PERMISSION> <FILE>
นอกจากนี้ คุณสามารถสร้างไดเร็กทอรีใหม่โดยใช้คำสั่ง mkdir:
mkdir <DIRECTORY_NAME>
คำถามที่พบบ่อย
1. ฉันจำเป็นต้องติดตั้งไคลเอ็นต์ SFTP หรือไม่
ในกรณีส่วนใหญ่ไม่มี เนื่องจากระบบ Linux ส่วนใหญ่จะมีไคลเอ็นต์ SFTP ที่ใช้เทอร์มินัลติดตั้งอยู่ตามค่าเริ่มต้น
2. ฉันใช้การตรวจสอบสิทธิ์คีย์สาธารณะได้ไหม
ได้ คุณสามารถใช้การพิสูจน์ตัวตนด้วยคีย์สาธารณะแทนรหัสผ่านเป็นวิธีการตรวจสอบสิทธิ์ได้ การตั้งค่านั้นค่อนข้างง่าย และให้ความปลอดภัยเพิ่มเติมสำหรับเซิร์ฟเวอร์ของคุณ
3. ฉันสามารถโฮสต์เซิร์ฟเวอร์ SSH พร้อมกันได้หรือไม่
ใช่. อย่างไรก็ตาม คุณจะต้องตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ SFTP ของคุณไม่ได้ใช้พอร์ตเดียวกันกับเซิร์ฟเวอร์ SSH