คำตอบสั้น ๆ: อัปโหลดและดาวน์โหลดไฟล์ระหว่างเครื่องของคุณกับเซิร์ฟเวอร์ Linux ผ่าน SSH ด้วย scp และ sftp บน Linux, macOS และ Windows รวมถึงกรณีใช้พอร์ต SSH อื่นและ SSH Key
คู่มือนี้อธิบาย sftp ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
ถ้าเข้าเซิร์ฟเวอร์ผ่าน SSH ได้ คุณโอนไฟล์ผ่านช่องทางเดียวกันได้ทันทีโดยไม่ต้องเปิด FTP เพิ่ม เครื่องมือหลักมี 2 ตัว คือ scp สำหรับคัดลอกไฟล์ในคำสั่งเดียว เหมาะกับงานที่รู้แน่ชัดว่าจะส่งไฟล์อะไรไปไหน และ sftp ซึ่งเป็นโหมดโต้ตอบคล้าย FTP ใช้เดินดูโฟลเดอร์ก่อนแล้วค่อยเลือกไฟล์ ทั้งสองเข้ารหัสข้อมูลตลอดทางและใช้ผู้ใช้ รหัสผ่าน หรือ SSH Key ชุดเดียวกับ SSH
คำสั่งในบทความนี้ใช้ได้บน Linux, macOS และ Windows 10/11 ซึ่งมี OpenSSH Client ติดตั้งมาแล้ว (เปิดผ่าน PowerShell หรือ Command Prompt) ส่วนผู้ที่ถนัดโปรแกรมแบบกราฟิก สามารถใช้ WinSCP หรือ FileZilla ที่เชื่อมต่อแบบ SFTP ได้เช่นกัน
สิ่งที่ต้องเตรียม
- ชื่อผู้ใช้ IP หรือโดเมนของเซิร์ฟเวอร์ และพอร์ต SSH (ค่าเริ่มต้นคือ 22) ในบทความใช้
[email protected]เป็นตัวอย่าง - เข้า SSH ได้สำเร็จแล้วอย่างน้อยหนึ่งครั้ง ถ้าใช้ SSH Key ดู ตั้งค่า SSH Key และปิดการเข้าสู่ระบบด้วยรหัสผ่านบน Linux
- ผู้ใช้บนเซิร์ฟเวอร์ต้องมีสิทธิ์เขียนโฟลเดอร์ปลายทาง
ขั้นตอนที่ 1: อัปโหลดไฟล์ด้วย scp
รูปแบบคือ scp ต้นทาง ปลายทาง ฝั่งที่เป็นเซิร์ฟเวอร์เขียนเป็น ผู้ใช้@โฮสต์:Path
scp backup.sql [email protected]:/home/admin/
ผลที่คาดหวังคือแถบความคืบหน้า เช่น backup.sql 100% 245MB 11.2MB/s 00:21 ถ้าไม่ระบุ Path หลังเครื่องหมาย : ไฟล์จะไปอยู่ในโฮมของผู้ใช้
อัปโหลดทั้งโฟลเดอร์ให้ใส่ -r
scp -r ./website [email protected]:/var/www/example.com/
บน Windows PowerShell ใช้ Path แบบ Windows ได้ตามปกติ เช่น
scp C:\Users\somchai\Downloads\backup.sql [email protected]:/home/admin/
ขั้นตอนที่ 2: ดาวน์โหลดไฟล์จากเซิร์ฟเวอร์
สลับตำแหน่งต้นทางและปลายทาง จุด . หมายถึงโฟลเดอร์ปัจจุบันบนเครื่องของคุณ
scp [email protected]:/var/log/nginx/error.log .
scp -r [email protected]:/home/admin/backups ./server-backups
ถ้า Path มีช่องว่าง ให้ครอบทั้ง Path ฝั่งเซิร์ฟเวอร์ด้วยเครื่องหมายคำพูด เช่น "[email protected]:/home/admin/my files/report.pdf"
ขั้นตอนที่ 3: ระบุพอร์ตและ SSH Key
ถ้าเปลี่ยนพอร์ต SSH แล้ว (ดู วิธีเปลี่ยน SSH Port บน Linux Server) ต้องระบุพอร์ต ข้อที่คนสับสนบ่อยคือ scp ใช้ตัว -P ใหญ่ ส่วน ssh ใช้ -p เล็ก
scp -P 2222 -i ~/.ssh/id_ed25519 backup.sql [email protected]:/home/admin/
| Option ของ scp | ความหมาย |
|---|---|
-P 2222 | พอร์ต SSH ของเซิร์ฟเวอร์ |
-i ไฟล์Key | ใช้ Private Key ที่ระบุ |
-r | คัดลอกทั้งโฟลเดอร์ |
-p (เล็ก) | รักษาวันที่แก้ไขและสิทธิ์ของไฟล์ |
-C | บีบอัดระหว่างส่ง ช่วยได้กับไฟล์ข้อความ แต่ไม่ช่วยกับไฟล์ที่บีบอัดแล้ว |
-l 8192 | จำกัดความเร็วเป็น Kbit/s (ตัวอย่างนี้ประมาณ 1 MB/s) เพื่อไม่ให้แย่ง Bandwidth ของเว็บ |
ถ้าต้องพิมพ์พอร์ตและ Key ซ้ำบ่อย ให้บันทึกไว้ในไฟล์ ~/.ssh/config แล้วใช้ชื่อย่อแทน เช่น scp backup.sql web1: ดู ใช้ไฟล์ ~/.ssh/config ให้ SSH เข้าเซิร์ฟเวอร์ได้สะดวกขึ้น