คำสั่ง scp: วิธีใช้และตัวเลือก การคัดลอกโฟลเดอร์และการระบุพอร์ต

สภาพแวดล้อมทดสอบตระกูล RHELAlmaLinux 9.8OpenSSH 9.9p1ฝั่งรับ Debian 12 · OpenSSH 9.2p1บัญชี rootตรวจสอบเมื่อ 2026-10-28

scp คือเครื่องมือคัดลอกที่ใช้รับส่งไฟล์กับเซิร์ฟเวอร์ที่คุณเชื่อมต่อผ่าน SSH เมื่อส่งไฟล์ด้วยคำสั่ง scp คุณจะเขียนต้นทางไว้ก่อนและปลายทางไว้หลัง เช่นเดียวกับ cp เมื่อเราส่งไฟล์และโฟลเดอร์จากเซิร์ฟเวอร์ AlmaLinux 9 ไปยังเซิร์ฟเวอร์ Debian 12 แล้วดึงกลับมา การถ่ายโอนใช้โปรโตคอล SFTP และไฟล์ขนาด 20MB ไปถึงภายใน 1 วินาที

เอาต์พุตด้านล่างทั้งหมดคือผลลัพธ์จริงจาก scp ของ OpenSSH 9.9 ที่รันด้วยบัญชี root ฝั่งส่ง โดยเปลี่ยนเฉพาะที่อยู่เซิร์ฟเวอร์และชื่อบัญชีเป็นค่าตัวอย่าง

1️⃣ วิธีใช้ scp และพาธระยะไกล

หน้าพาธบนเซิร์ฟเวอร์ระยะไกลให้ใส่ [บัญชี@ที่อยู่เซิร์ฟเวอร์:] พาธที่ไม่มีเครื่องหมายทวิภาคจะถือเป็นพาธบนเซิร์ฟเวอร์ที่รันคำสั่ง ดังนั้นฝั่งที่มีเครื่องหมายทวิภาคจะเป็นตัวกำหนดว่าเป็นการส่งหรือการรับ

🧭 ทิศทางการคัดลอกของ scp และพาธระยะไกล
แผนภาพอธิบาย
↔️ ทิศทางการคัดลอก
$ scp report.txt user@203.0.113.10:~/scp-test/user@203.0.113.10:~/scp-test/report.txt ./downloads/-3 user@203.0.113.10:~/scp-test/report.txt user@198.51.100.20:~/scp-test/
ต้นทาง💻 เซิร์ฟเวอร์ที่รันคำสั่งreport.txt
➜
ปลายทาง🖥️ เซิร์ฟเวอร์ระยะไกล203.0.113.10:~/scp-test/
ต้นทาง🖥️ เซิร์ฟเวอร์ระยะไกล203.0.113.10:~/scp-test/report.txt
➜
ปลายทาง💻 เซิร์ฟเวอร์ที่รันคำสั่ง./downloads/
ต้นทาง🖥️ เซิร์ฟเวอร์ระยะไกล A203.0.113.10:~/scp-test/report.txt
➜
ตัวกลาง💻 เซิร์ฟเวอร์ที่รันคำสั่ง-3
➜
ปลายทาง🖥️ เซิร์ฟเวอร์ระยะไกล B198.51.100.20:~/scp-test/
🧩 รูปแบบพาธระยะไกล
user บัญชีที่ใช้เชื่อมต่อ 203.0.113.10 ที่อยู่เซิร์ฟเวอร์หรือโดเมน :~/scp-test/ หลังเครื่องหมายทวิภาคคือพาธบนเซิร์ฟเวอร์นั้น (ทิลดาคือโฟลเดอร์โฮม)
ถ้าเขียนไฟล์ในเครื่องไว้หน้าและพาธระยะไกลไว้หลังจะเป็นการส่ง ถ้าพาธหลังเครื่องหมายทวิภาคลงท้ายด้วยเครื่องหมายทับ ไฟล์จะถูกบันทึกในโฟลเดอร์นั้นด้วยชื่อเดิม
ถ้าเขียนพาธระยะไกลไว้หน้าจะเป็นการรับ ไฟล์ที่รับมาจะอยู่ที่พาธในเครื่องที่เขียนไว้หลัง
เมื่อทั้งต้นทางและปลายทางเป็นเซิร์ฟเวอร์ระยะไกล ตั้งแต่ OpenSSH 8.7 ข้อมูลจะผ่านเซิร์ฟเวอร์ที่รันคำสั่ง ซึ่งเป็นวิธีเดียวกับการใส่ -3

ส่ง report.txt จากโฟลเดอร์ปัจจุบันไปยังโฟลเดอร์ scp-test ใต้โฮมของเซิร์ฟเวอร์ระยะไกล

scp report.txt user@203.0.113.10:~/scp-test/
report.txt                                    100%   14     5.1KB/s   00:00

เมื่อถ่ายโอนเสร็จ ชื่อไฟล์ ความคืบหน้า ขนาด ความเร็ว และเวลาที่ใช้จะแสดงในบรรทัดเดียว การแสดงความคืบหน้านี้ปรากฏเฉพาะเมื่อรันในเทอร์มินัล ดังนั้นถ้าเปลี่ยนทางเอาต์พุตไปยังไฟล์ ในไฟล์จะไม่มีอะไรเหลืออยู่

เมื่อดึงไฟล์มา ให้เขียนพาธระยะไกลไว้หน้าและพาธในเครื่องที่จะบันทึกไว้หลัง

scp user@203.0.113.10:~/scp-test/report.txt ./downloads/
report.txt                                    100%   14     2.7KB/s   00:00

ถ้าพาธปลายทางลงท้ายด้วยชื่อไฟล์แทนโฟลเดอร์ ไฟล์จะถูกบันทึกด้วยชื่อนั้น หลังส่งด้วยคำสั่งด้านล่าง ในโฟลเดอร์ฝั่งรับมี report.txt อยู่ในชื่อ report-1028.txt

scp report.txt user@203.0.113.10:~/scp-test/report-1028.txt
report.txt                                    100%   14     4.6KB/s   00:00

🔲 ตัวจำลองคำสั่ง scp

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

ตัวจำลองคำสั่ง scpOpenSSH 9.9
[root@server work]#
ทำงานเฉพาะในเบราว์เซอร์ ดูไฟล์ฝั่งระยะไกลได้จากรายการด้านซ้าย และเรียกคำสั่งก่อนหน้ากลับมาด้วย ↑↓

2️⃣ ตัวเลือกของคำสั่ง scp

ตัวเลือกให้เขียนหลัง scp ทันที ก่อนต้นทาง -P ที่ระบุพอร์ตเป็นตัวพิมพ์ใหญ่ ส่วน -p ตัวพิมพ์เล็กใช้คงเวลาและสิทธิ์ ถ้าพิมพ์สลับกันจึงทำงานคนละอย่าง

-l กำหนดเพดานความเร็วการถ่ายโอนเป็นหน่วย Kbit/s เมื่อส่งไฟล์ 20MB โดยไม่ใส่ตัวเลือก การถ่ายโอนเสร็จภายใน 1 วินาที

scp backup.tar.gz user@203.0.113.10:~/scp-test/
backup.tar.gz                                 100%   20MB  53.6MB/s   00:00

-l 8000 เท่ากับประมาณ 1,000KB ต่อวินาที เมื่อส่งไฟล์เดียวกันด้วย -l 8000 ความเร็วที่แสดงคือ 996.5KB/s และการถ่ายโอนใช้เวลา 20 วินาที

scp -l 8000 backup.tar.gz user@203.0.113.10:~/scp-test/backup-l.tar.gz
backup.tar.gz                                 100%   20MB 996.5KB/s   00:20

-C บีบอัดข้อมูลในการเชื่อมต่อ SSH ด้วยวิธีเดียวกับ gzip เมื่อส่งไฟล์ล็อก 19MB ที่มีประโยคซ้ำกันอย่างละสามครั้ง ระหว่างเซิร์ฟเวอร์สองเครื่องนี้ฝั่งที่ใส่ -C ช้ากว่าเล็กน้อย

คำสั่งไฟล์เวลาทำงานความเร็วที่แสดง
scp backup.tar.gz20MB0.68 วินาที53.6MB/s
scp -l 8000 backup.tar.gz20MB20.82 วินาที996.5KB/s
scp access.log (3 ครั้ง)19MB0.79~0.89 วินาที—
scp -C access.log (3 ครั้ง)19MB0.84~0.97 วินาที—

เวลาทำงานคือเวลาตั้งแต่เริ่มคำสั่ง เชื่อมต่อ จนถ่ายโอนเสร็จ คู่มือ ssh ก็อธิบายว่าการบีบอัดได้ผลบนสายความเร็วต่ำ และทำให้การถ่ายโอนช้าลงบนเครือข่ายความเร็วสูง

-v แสดงขั้นตอนตั้งแต่เชื่อมต่อจนถึงถ่ายโอนเป็นบรรทัด debug1 จึงใช้หาสาเหตุเมื่อเชื่อมต่อไม่ได้หรือค้างที่การยืนยันตัวตน เนื่องจากเอาต์พุตยาว เราจึงใช้ grep เลือกเฉพาะบรรทัดการยืนยันตัวตนและการถ่ายโอน

scp -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'
Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending subsystem: sftp
Transferred: sent 2536, received 3248 bytes, in 0.1 seconds

บรรทัด [Sending subsystem: sftp] หมายความว่า scp ส่งไฟล์ด้วยโปรโตคอล SFTP ตั้งแต่ OpenSSH 9.0 scp ใช้ SFTP เป็นค่าเริ่มต้น ถ้าใส่ -O จะถ่ายโอนด้วยโปรโตคอล SCP แบบเก่า และตำแหน่งเดียวกันจะแสดง [Sending command: scp -v -t]

scp -O -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'
Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending command: scp -v -t ~/scp-test/
Sending file modes: C0600 14 report.txt
Transferred: sent 2328, received 3036 bytes, in 0.1 seconds

📌 ตัวเลือกหลัก: ผลที่รันในบทความนี้

ตัวเลือกหน้าที่ผลที่เห็นในบทความนี้
-Pระบุพอร์ตเชื่อมต่อ SSHพอร์ต 22 ส่ง report.txt สำเร็จ พอร์ต 2222 ที่ไม่ได้เปิดจบด้วย [Connection timed out]
-iระบุไฟล์คีย์ส่วนตัวสำหรับการยืนยันตัวตนด้วยคีย์สาธารณะระบุ ~/.ssh/id_ed25519 แล้วส่ง report.txt สำเร็จ
-rคัดลอกไฟล์และโฟลเดอร์ย่อยในโฟลเดอร์ฝั่งรับมีโฟลเดอร์ css และ images ตามโครงสร้างเดิม ถ้าไม่ใส่จะไม่ถ่ายโอนเพราะข้อผิดพลาด [not a regular file]
-pคงเวลาแก้ไข เวลาเข้าถึง และสิทธิ์ของต้นทางเวลาแก้ไขคงเดิม ส่วนฝั่งรับของบทความนี้ สิทธิ์ 600 คงอยู่เฉพาะไฟล์ที่ส่งด้วย -O -p
-Cบีบอัดข้อมูลในการเชื่อมต่อ SSHกับล็อก 19MB ระหว่างเซิร์ฟเวอร์สองเครื่องของบทความนี้ ฝั่งที่ใส่ตัวเลือกช้ากว่าเล็กน้อย
-lกำหนดเพดานความเร็วการถ่ายโอนเป็นหน่วย Kbit/s-l 8000 กับ 20MB ได้ 996.5KB/s ใช้เวลา 20.82 วินาที
-vแสดงขั้นตอนตั้งแต่เชื่อมต่อจนถึงถ่ายโอนเป็นบรรทัด debug1ยืนยันการถ่ายโอนแบบ SFTP จากบรรทัด [Sending subsystem: sftp]
-3ถ่ายโอนข้อมูลระหว่างเซิร์ฟเวอร์ระยะไกลสองเครื่องผ่านเซิร์ฟเวอร์ที่รันคำสั่ง (ค่าเริ่มต้นตั้งแต่ OpenSSH 8.7)ใช้สองโฟลเดอร์บนเซิร์ฟเวอร์เดียวกันเป็นต้นทางและปลายทาง แล้วส่ง report.txt สำเร็จ
-Oถ่ายโอนด้วยโปรโตคอล SCP แบบเก่าเอาต์พุต -v แสดง [Sending command: scp -v -t] พาธที่มีช่องว่างต้องเพิ่มแบ็กสแลชอีก
-oส่งตัวเลือกรูปแบบ ssh_config ให้ sshตั้งเวลารอ 10 วินาทีด้วย ConnectTimeout=10 แล้วยืนยัน [Connection timed out]

📎 ตัวเลือกอื่น: ตามคู่มือทางการ

ตัวเลือกหน้าที่
-qปิดการแสดงความคืบหน้า รวมถึงคำเตือนและข้อความวินิจฉัยของ ssh
-Jเชื่อมต่อกับ jump host ก่อน แล้วตั้งการส่งต่อ TCP จากที่นั่นไปยังปลายทางสุดท้าย (รูปย่อของการตั้งค่า ProxyJump หลายฮอปคั่นด้วยจุลภาค)
-Fระบุไฟล์อื่นเป็นไฟล์การตั้งค่าเฉพาะผู้ใช้ของ ssh (ส่งต่อให้ ssh โดยตรง)
-4บังคับให้ใช้เฉพาะที่อยู่ IPv4
-6บังคับให้ใช้เฉพาะที่อยู่ IPv6

3️⃣ การคัดลอกโฟลเดอร์ด้วย scp และการคงเวลา

ถ้าระบุโฟลเดอร์โดยไม่ใส่ตัวเลือก scp จะแสดงข้อผิดพลาดว่าไม่ใช่ไฟล์ปกติและไม่ถ่ายโอน

scp site-files user@203.0.113.10:~/scp-test/
scp: local "site-files" is not a regular file
scp: failed to upload file site-files to ~/scp-test/

ถ้าใส่ -r จะคัดลอกไฟล์และโฟลเดอร์ย่อยในโฟลเดอร์

scp -r site-files user@203.0.113.10:~/scp-test/
logo.png                                      100%   48KB   4.7MB/s   00:00
style.css                                     100%   15     5.0KB/s   00:00
index.html                                    100%   15     5.2KB/s   00:00

เอาต์พุตแสดงเฉพาะชื่อไฟล์ ส่วนเอาต์พุต find ฝั่งรับมีโฟลเดอร์ css และ images ใต้ site-files ตามโครงสร้างเดิม

ssh user@203.0.113.10 'cd ~/scp-test && find site-files'
site-files
site-files/images
site-files/images/logo.png
site-files/index.html
site-files/css
site-files/css/style.css

-r จะตามลิงก์สัญลักษณ์ในโฟลเดอร์แล้วคัดลอกไฟล์ต้นฉบับ ดังนั้นโฟลเดอร์ที่ต้องย้ายลิงก์ไปเป็นลิงก์ควรใช้ rsync -a

-p คงเวลาแก้ไข เวลาเข้าถึง และสิทธิ์ของต้นทาง เราตั้ง report.txt ต้นฉบับให้มีเวลาแก้ไข 1 ตุลาคม 2026 00:00 (UTC) และสิทธิ์ 600 ก่อนส่ง เขตเวลาของเซิร์ฟเวอร์ฝั่งรับคือ UTC จึงรัน ls ฝั่งส่งด้วย TZ=UTC เช่นกัน

TZ=UTC ls -l report.txt
-rw------- 1 root root 14 Oct  1 00:00 report.txt
scp -p report.txt user@203.0.113.10:~/scp-test/report-p.txt
report.txt                                    100%   14     4.7KB/s   00:00
scp -O -p report.txt user@203.0.113.10:~/scp-test/report-Op.txt
report.txt                                    100%   14     4.2KB/s   00:00
ssh user@203.0.113.10 'ls -l ~/scp-test/report.txt ~/scp-test/report-p.txt ~/scp-test/report-Op.txt'
-rw------- 1 user user 14 Oct  1 00:00 /home/user/scp-test/report-Op.txt
-rw-rw-r-- 1 user user 14 Oct  1 00:00 /home/user/scp-test/report-p.txt
-rw-rw-r-- 1 user user 14 Oct 28 06:17 /home/user/scp-test/report.txt

report-p.txt ที่ส่งด้วย -p และ report-Op.txt ที่ส่งด้วย -O -p ยังคงเวลาเดิม ส่วน report.txt ที่ส่งโดยไม่ใส่ตัวเลือกถูกบันทึกด้วยเวลาที่ส่ง บนเซิร์ฟเวอร์ฝั่งรับ ไฟล์ที่ส่งผ่าน SFTP มีสิทธิ์ 664 แม้ใส่ -p และมีเพียงไฟล์ที่ส่งด้วยโปรโตคอล SCP แบบเก่า (-O) ที่คงสิทธิ์ 600

ดังนั้นไฟล์ที่ต้องมีสิทธิ์เหมือนต้นทาง ให้ตรวจสอบสิทธิ์ด้วย ls -l ฝั่งรับหลังส่ง

4️⃣ การระบุพอร์ตและไฟล์คีย์ใน scp

เซิร์ฟเวอร์ที่เชื่อมต่อด้วยพอร์ตเริ่มต้น 22 และคีย์เริ่มต้นไม่ได้ ให้ระบุพอร์ตและคีย์เองก่อนส่ง -P ระบุพอร์ตเชื่อมต่อ SSH และ -i ระบุไฟล์คีย์ส่วนตัวสำหรับการยืนยันตัวตนด้วยคีย์สาธารณะ

ด้านล่างเป็นตัวอย่างที่ระบุพอร์ต 22 และไฟล์คีย์โดยตรง ถ้าเซิร์ฟเวอร์เปลี่ยนพอร์ตแล้ว ให้เขียนหมายเลขนั้นแทน 22

scp -P 22 -i ~/.ssh/id_ed25519 report.txt user@203.0.113.10:~/scp-test/
report.txt                                    100%   14     5.3KB/s   00:00

ถ้าไม่ใส่ -i จะใช้คีย์ชื่อเริ่มต้นใต้ ~/.ssh (id_rsa, id_ecdsa, id_ed25519 เป็นต้น) ตามลำดับเช่นเดียวกับ ssh

ถ้าส่งไปยังเซิร์ฟเวอร์เดิมบ่อย ให้เขียนชื่อแทนไว้ใน ~/.ssh/config แล้วพิมพ์เฉพาะชื่อแทนใน scp

Host myserver
    HostName 203.0.113.10
    User user
    Port 22
    IdentityFile ~/.ssh/id_ed25519

ชื่อในบรรทัด Host จะเป็นชื่อแทน และสี่บรรทัดด้านล่างจะแทนที่อยู่เซิร์ฟเวอร์ บัญชี พอร์ต และไฟล์คีย์ คำสั่งที่เขียนเฉพาะชื่อแทนก็จบด้วยผลลัพธ์หนึ่งบรรทัดแบบเดียวกับตอนเขียนที่อยู่และคีย์ครบ

scp report.txt myserver:~/scp-test/
report.txt                                    100%   14     4.2KB/s   00:00

-P, -i และชื่อแทนล้วนใช้การตั้งค่าการเชื่อมต่อ ssh ตามเดิม ขั้นตอนสร้างคีย์และลงทะเบียนบนเซิร์ฟเวอร์จึงเหมือนกับตอนเชื่อมต่อด้วย คำสั่ง SSH เช่นกัน

5️⃣ การคัดลอกระหว่างเซิร์ฟเวอร์ด้วย scp

แม้ทั้งต้นทางและปลายทางเป็นเซิร์ฟเวอร์ระยะไกล ก็คัดลอกได้ด้วย scp บรรทัดเดียว ตั้งแต่ OpenSSH 8.7 ข้อมูลจะถ่ายโอนผ่านเซิร์ฟเวอร์ที่รันคำสั่ง และวิธีนี้คือ -3 บันทึกการออกรุ่นอย่างเป็นทางการระบุเหตุผลที่เปลี่ยนเป็นค่าเริ่มต้นว่า ไม่ต้องเก็บข้อมูลยืนยันตัวตนของเซิร์ฟเวอร์ปลายทางไว้บนเซิร์ฟเวอร์ต้นทาง

การวัดด้านล่างใช้สองโฟลเดอร์บนเซิร์ฟเวอร์เดียวกันเป็นต้นทางและปลายทาง ถ้าเซิร์ฟเวอร์ปลายทางต่างกัน ให้เปลี่ยนเฉพาะบัญชีและที่อยู่ด้านหลัง

scp -3 user@203.0.113.10:~/scp-test/report.txt user@203.0.113.10:~/scp-test/copy3/
report.txt                                    100%   14     2.5KB/s   00:00

เหมือนสำนักงานใหญ่รับเอกสารระหว่างสองสาขาแล้วส่งต่อให้อีกที

วิธีเก่าที่เซิร์ฟเวอร์ต้นทางส่งตรงไปยังเซิร์ฟเวอร์ปลายทางระบุด้วย -R วิธีนี้ต้องให้เซิร์ฟเวอร์ต้นทางเชื่อมต่อเซิร์ฟเวอร์ปลายทางได้โดยไม่ใช้รหัสผ่าน ตั้งแต่ OpenSSH 10.6 การใช้ -R จะมีคำเตือนว่าจะเลิกสนับสนุน และรุ่นถัดไปมีแผนจะละเว้นตัวเลือกนี้แล้วคัดลอกด้วยวิธี -3

6️⃣ เปรียบเทียบ scp กับ rsync

การส่งไฟล์ไม่กี่ไฟล์ครั้งเดียวใช้ scp ก็พอ ส่วนงานที่ต้องซิงก์โฟลเดอร์เดิมซ้ำๆ หรือทำการถ่ายโอนที่ขาดตอนต่อ ควรใช้ คำสั่ง rsync scp จะส่งไฟล์ที่ระบุทั้งหมดใหม่ทุกครั้งที่รัน ส่วน rsync จะเปรียบเทียบต้นทางกับปลายทางแล้วถ่ายโอนเฉพาะไฟล์ที่เปลี่ยน

รายการscprsync
ขอบเขตการถ่ายโอนไฟล์ที่ระบุทั้งหมดทุกครั้งที่รันเฉพาะไฟล์ที่เปลี่ยนจากต้นทาง
เก็บไฟล์ที่รับไม่ครบ (--partial)❌✅
ลบไฟล์ที่ไม่มีในต้นทาง (--delete)❌✅
ลิงก์สัญลักษณ์ตามไปคัดลอกไฟล์ต้นฉบับ-a คงเป็นลิงก์
สิ่งที่ฝั่งรับต้องมีการเชื่อมต่อ SSH และเซิร์ฟเวอร์ SFTPติดตั้ง rsync ทั้งสองฝั่ง

7️⃣ ข้อความข้อผิดพลาดของคำสั่ง scp และวิธีแก้

เมื่อ scp ล้มเหลว สาเหตุจะแสดงในบรรทัดแรกของเอาต์พุตทันที ทั้งสามกรณีที่เราตั้งใจทำให้เกิดข้อผิดพลาดด้วยไฟล์ที่ไม่มี สิทธิ์เขียน และพอร์ตผิด สาเหตุแสดงในบรรทัดแรกทั้งหมด และรหัสออกก็ไม่ใช่ 0 ทุกกรณี

🔲 No such file or directory

ถ้าพยายามรับไฟล์ที่ไม่มีอยู่ฝั่งระยะไกล จะแสดง [No such file or directory] พร้อมพาธ

scp user@203.0.113.10:~/scp-test/nofile.txt ./downloads/
scp: ~/scp-test/nofile.txt: No such file or directory

ตอนส่ง ถ้าไม่มีโฟลเดอร์ปลายทางก็เกิดข้อผิดพลาดเดียวกัน scp ไม่สร้างโฟลเดอร์ที่ไม่มี จึงต้องรัน mkdir -p ผ่าน ssh เพื่อสร้างโฟลเดอร์ก่อน

scp report.txt user@203.0.113.10:~/scp-test/nodir/sub/
scp: dest open "scp-test/nodir/sub/": No such file or directory
scp: failed to upload file report.txt to ~/scp-test/nodir/sub/

🔲 Permission denied

ถ้าโฟลเดอร์ฝั่งรับไม่มีสิทธิ์เขียน [Permission denied] จะตามหลัง [dest open] ด้านล่างคือผลการส่งไปยังโฟลเดอร์ readonly ที่ตั้งสิทธิ์ 555

scp report.txt user@203.0.113.10:~/scp-test/readonly/
scp: dest open "scp-test/readonly/report.txt": Permission denied
scp: failed to upload file report.txt to ~/scp-test/readonly/

ถ้าหน้า [Permission denied] มี [บัญชี@ที่อยู่เซิร์ฟเวอร์:] และในวงเล็บมีวิธียืนยันตัวตนอย่าง publickey แสดงว่าถูกปฏิเสธในขั้นยืนยันตัวตนตอนเชื่อมต่อ ข้อความนี้เป็นรูปแบบที่โปรแกรม ssh แสดงเมื่อยืนยันตัวตนล้มเหลว จึงควรตรวจไฟล์คีย์ที่ระบุด้วย -i และคีย์สาธารณะที่ลงทะเบียนบนเซิร์ฟเวอร์ก่อน

🔲 Connection timed out

ถ้าหมายเลขพอร์ตผิดหรือไฟร์วอลล์บล็อกพอร์ตนั้นจนไม่มีการตอบกลับ จะรอการเชื่อมต่อแล้วจบด้วย [Connection timed out] ด้านล่างคือผลการส่งไปยังพอร์ต 2222 ที่ไม่ได้เปิดโดยตั้งเวลารอ 10 วินาที

scp -P 2222 -o ConnectTimeout=10 report.txt user@203.0.113.10:~/scp-test/
ssh: connect to host 203.0.113.10 port 2222: Connection timed out
scp: Connection closed

เมื่อเกิดข้อผิดพลาดนี้ ให้ตรวจก่อนว่าหมายเลขที่ใส่ใน -P ตรงกับพอร์ต SSH ของเซิร์ฟเวอร์หรือไม่

🔲 ช่องว่างและเครื่องหมายทิลดา (~) ในพาธ

scp ปัจจุบันที่ถ่ายโอนผ่าน SFTP เพียงครอบพาธระยะไกลที่มีช่องว่างด้วยเครื่องหมายคำพูดเดี่ยวครั้งเดียวก็พอ

scp report.txt 'user@203.0.113.10:~/scp-test/my files/'
report.txt                                    100%   14     4.7KB/s   00:00

เมื่อใส่ -O ในคำสั่งเดียวกันเพื่อส่งด้วยโปรโตคอล SCP แบบเก่า ก็ล้มเหลวด้วย [ambiguous target] เพราะในโปรโตคอล SCP แบบเก่า เชลล์ฝั่งระยะไกลจะตีความพาธอีกครั้ง

scp -O report.txt 'user@203.0.113.10:~/scp-test/my files/'
scp: ambiguous target

กรณีนี้ให้ใส่แบ็กสแลชหน้าช่องว่าง เพื่อให้เชลล์ฝั่งระยะไกลอ่านเป็นคำเดียวด้วย

scp -O report.txt 'user@203.0.113.10:~/scp-test/my\ files/'
report.txt                                    100%   14     4.5KB/s   00:00

ถ้าพาธหลังเครื่องหมายทวิภาคไม่ได้ขึ้นต้นด้วยเครื่องหมายทับหรือทิลดา จะถือตามโฟลเดอร์โฮมของบัญชีระยะไกล

scp report.txt user@203.0.113.10:scp-test/report-rel.txt
report.txt                                    100%   14     5.6KB/s   00:00

คู่มือทางการอธิบายให้ใช้ -O เมื่อเซิร์ฟเวอร์ SFTP รุ่นเก่าแปลงพาธที่ขึ้นต้นด้วยทิลดาเป็นโฟลเดอร์โฮมไม่ได้ กรณีนี้การเขียนพาธตามโฮมโดยไม่มีทิลดาแบบด้านบนก็บันทึกไว้ที่เดียวกัน

🔢 FAQ & เนื้อหาแนะนำ

ถ้ามีไฟล์ชื่อเดียวกัน จะถูกเขียนทับด้วยไฟล์ใหม่โดยไม่ถามยืนยัน เมื่อส่ง report.txt เดิมไปยังโฟลเดอร์เดิมหลายครั้ง ก็ถ่ายโอนทุกครั้งโดยไม่ถาม ดังนั้นไฟล์ที่ต้องเก็บไว้ให้เขียนชื่ออื่นต่อท้ายพาธปลายทางแล้วส่ง

ถ้าใส่ * ในพาธระยะไกลแล้วครอบด้วยเครื่องหมายคำพูดเดี่ยว จะรับทุกไฟล์ที่ชื่อตรงกันจากเซิร์ฟเวอร์ระยะไกล เมื่อรับ report-*.txt จากเซิร์ฟเวอร์ระยะไกล ไฟล์ที่ชื่อตรงกันหกไฟล์ถูกถ่ายโอนตามลำดับ เครื่องหมายคำพูดมีไว้ไม่ให้เชลล์ของเซิร์ฟเวอร์ที่รันคำสั่งตีความ * ก่อน

ถ้าใส่ -B จะทำงานในโหมดแบตช์ที่ไม่ถามรหัสผ่านหรือวลีรหัสผ่าน ตามคู่มือทางการ โหมดนี้ป้อนรหัสผ่านไม่ได้ งานอัตโนมัติอย่าง cron จึงต้องตั้งค่าการยืนยันตัวตนด้วยคีย์ก่อน

🧭 เนื้อหาคำสั่งเครือข่ายแนะนำ บทความ 13 · อ้างอิง 2
🗂️ คำสั่งเครือข่าย
📄 คำสั่ง ip 📄 คำสั่ง netstat · ifconfig 📄 คำสั่ง nmtui
📄 คำสั่ง SSH 📄 คำสั่ง rsync 📄 คำสั่ง wget 📄 คำสั่ง rz · sz 📄 คำสั่ง scp
📄 คำสั่ง host 📄 คำสั่ง nslookup
📄 คำสั่ง iptables 📄 คำสั่ง firewall-cmd 📄 คำสั่ง certbot
Linux SSH (Secure Shell)
Linux · การเชื่อมต่อ
คำสั่ง SSH: ตัวเลือกและวิธีใช้
ใน Linux SSH (Secure Shell) เป็นโปรโตคอลที่ช่วยให้เชื่อมต่อกับระบบอื่นผ่านเครือข่ายได้อย่างปลอดภัย
อ่านบทความ →เนื้อหาปัจจุบัน
คำสั่ง rsync_ส่งจากโลคัลไปยังระยะไกล
Linux · การส่งไฟล์
คำสั่ง rsync ของ Linux: ตัวเลือก | ตัวอย่างการใช้งาน
ถ้าคัดลอกใหม่ทั้งหมดทุกครั้งเพื่อให้โฟลเดอร์ของเซิร์ฟเวอร์ 2 เครื่องตรงกัน แม้จะมีไฟล์ที่เปลี่ยนเพียงไฟล์เดียว ปริมาณข้อมูลที่ส่งก็ยังเท่ากับขนาดทั้งหมด
อ่านบทความ →เนื้อหาปัจจุบัน
คำสั่ง TOP ของ Linux: อินเทอร์เฟซบรรทัดคำสั่ง (CLI-Command-Line Interface)
Linux · การส่งไฟล์
คำสั่ง wget ของ Linux
คำสั่ง wget ใช้เรียกลิงก์ดาวน์โหลดบนเว็บจากบรรทัดคำสั่งของ Linux เพื่อดาวน์โหลดไฟล์
อ่านบทความ →เนื้อหาปัจจุบัน
ติดตั้งเครื่องมือ lrzsz บน Rocky Linux
Linux · การส่งไฟล์
Linux: ติดตั้งเครื่องมือ lrzsz และอัปโหลด (rz) กับดาวน์โหลด (sz) ไฟล์
ถ้าจะใช้คำสั่ง rz และ sz อัปโหลดและดาวน์โหลดไฟล์บน Linux ต้องติดตั้ง lrzsz ไว้บนเซิร์ฟเวอร์
อ่านบทความ →เนื้อหาปัจจุบัน
แผนภาพอธิบายทิศทางการคัดลอกและพาธระยะไกลของคำสั่ง scp: การคัดลอกระหว่างเซิร์ฟเวอร์สองเครื่องถ่ายโอนผ่านเซิร์ฟเวอร์ที่รันคำสั่ง
Linux · การส่งไฟล์
คำสั่ง scp: วิธีใช้และตัวเลือก การคัดลอกโฟลเดอร์และการระบุพอร์ต
scp คือเครื่องมือคัดลอกที่ใช้รับส่งไฟล์กับเซิร์ฟเวอร์ที่คุณเชื่อมต่อผ่าน SSH เมื่อส่งไฟล์ด้วยคำสั่ง scp คุณจะเขียนต้นทางไว้ก่อนและปลายทางไว้หลัง เช่นเดียวกับ cp
อ่านบทความ →เนื้อหาปัจจุบัน

ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

Prove your humanity: 9   +   7   =