วิธีดึงไฟล์จากเซิร์ฟเวอร์โดยใช้ scp?


31

ฉันอยู่บนเครื่อง A และต้องการดึงไฟล์จากเครื่อง B

A$ scp <myuserid>@hostB:<path of file in B> .

มันบอกว่า:

scp: <path of file in B>: No such file or directory

แต่บนเครื่อง B ไฟล์นี้มีอยู่ในเส้นทางนี้

เกิดอะไรขึ้น?


นี่เป็นรูปแบบที่แน่นอนของคำสั่งที่คุณใช้หรือไม่? หรือมีชื่อไฟล์หลัง ':'?
dtyler

คำตอบ:


43

คุณไม่ได้ระบุไฟล์ใด ๆ : คุณต้องเพิ่มไฟล์ (ด้วยพา ธ ) หลังโคลอน:

A$ scp <myuserid>@hostB:/absolutepath/file .

หรือ

A$ scp <myuserid>@hostB:relativepath/file .

สำหรับพา ธ ที่สัมพันธ์กับโฮมไดเร็กตอรี่ของคุณ

หากคุณไม่ได้ระบุผู้ใช้อื่น (เช่นผู้ใช้ใน A และ B เหมือนกัน) คุณไม่จำเป็นต้องใช้ @

A$ scp hostB:/path/file .

2
ฉันแก้ไขการจัดรูปแบบในคำถาม แต่คำตอบของคุณอาจยังคงใช้ได้ ปัญหาอาจมาจากความสับสนระหว่างเส้นทางสัมบูรณ์และเส้นทาง (ถึงบ้าน)
Stéphane Gimenez

@ StéphaneGimenezตอนนี้ฉันเห็นคำตอบที่แก้ไขแล้วที่ฉันเข้าใจแล้ว ดูเหมือนคำถามแปลก ๆ :-)
มัตเตโอ

4
$ scp username@remoteip:remote_location_file /location/where/you/save

ใช้ได้เฉพาะเมื่อคุณคัดลอกไฟล์ ถ้าคุณต้องการคัดลอกไดเรกทอรีใช้

$ scp -r username@remoteip:remote_location_directory /location/where/you/save

ตัวเลือกที่คุณอาจใช้ตามความต้องการของคุณ

-P พอร์ต
ระบุพอร์ตที่จะเชื่อมต่อกับบนโฮสต์ระยะไกล โปรดทราบว่าตัวเลือกนี้เขียนด้วยตัวพิมพ์ใหญ่ "P" เนื่องจาก -p ถูกสงวนไว้สำหรับการรักษาเวลาและโหมดของไฟล์ใน rcp แล้ว

-p
รักษาเวลาการแก้ไขเวลาการเข้าถึงและโหมดจากไฟล์ต้นฉบับ

-r
ซ้ำไดเรกทอรีทั้งหมด

-v

โหมด verbose ทำให้ scp และ ssh พิมพ์ข้อความดีบั๊กเกี่ยวกับความคืบหน้า สิ่งนี้มีประโยชน์ในการแก้จุดบกพร่องการเชื่อมต่อการรับรองความถูกต้องและปัญหาการกำหนดค่า


1
OP ขอให้คัดลอกไฟล์ไม่ใช่ไดเรกทอรี
ตอบโต้

2

ใช้เส้นทาง scp ที่เหมาะสม

scp ssh://user@hostname/tmp/foo.txt .

1

คุณสามารถระบุพา ธ ไฟล์ที่สัมพันธ์กับโฮมไดเร็กตอรี่ของคุณหรือพา ธ ไฟล์ที่แน่นอน ตัวอย่างเช่นหากfoo.txtอยู่ในไดเรกทอรีที่เรียกว่าdocsภายใต้ไดเรกทอรีบ้านของคุณและbar.txtอยู่ใน/var/tmpคุณสามารถทำได้

scp username@host.example.com:docs/foo.txt .
scp username@host.example.com:/var/tmp/bar.txt .

โปรดทราบว่าหากชื่อไฟล์มีอักขระที่พิเศษสำหรับเปลือกระยะไกล (โดยทั่วไปคือช่องว่างหรือ!"#$&'*;<>?[\]^`{|}~) คุณจะต้องหลบหนีพวกเขาสำหรับเปลือกระยะไกลนอกเหนือจากการหลบหนีพวกเขาสำหรับเปลือกท้องถิ่น ตัวอย่างเช่นหากไฟล์ถูกเรียกใช้foo bar.txtและอยู่ในโฮมไดเร็กทอรีของคุณ:

scp username@host.example.com:'foo\ bar.txt' .

หากคุณมีปัญหากับไฟล์ที่มีอักขระเครื่องหมายวรรคตอนให้ลองใช้sftpแทนscpการถ่ายโอน หรือใช้วิธีการที่สะดวกยิ่งขึ้นถ้าคุณสามารถใช้FUSE : ติดตั้งระบบไฟล์ของเครื่องระยะไกลโดยใช้sshfsแล้วใช้คำสั่งการจัดการไฟล์ธรรมดา

mkdir host.example.com
sshfs username@host.example.com:/ host.example.com
cp host.example.com/path/to/file .

1

หนึ่งสามารถ SCP ได้อย่างง่ายดายถ้ามี DMZ ผู้ใช้และรหัสผ่านคุณอยู่ที่เครื่องของคุณ: จาก DMZ ไปยังเครื่องลินุกซ์ในท้องถิ่นของคุณ (ดึง) หมายถึงคัดลอก abc.text ภายใน folder2 ไปยัง PWD ที่คุณลงชื่อเข้าใช้ปัจจุบัน

scp user@111111:folder1/folder2/abc.txt .

มันจะขอรหัสผ่าน

นั่นคือทั้งหมด

ตอนนี้คุณต้องการส่งโฟลเดอร์จะโฟลเดอร์ย่อยและไฟล์จากเครื่องท้องถิ่นของคุณไปยัง DMZ:

usr @ localmachine: ~ / abc / defs> scp -r folder / usr @ 111111: vkrishna / docker /

รหัสผ่านจะถูกถามอีกครั้ง

: เป็นโฟลเดอร์รูทของเครื่องระยะไกลและ vkrishna เป็นโฟลเดอร์ที่มี & โฟลเดอร์ย่อย docker อีกครั้ง ภายในโฟลเดอร์ defs มีโฟลเดอร์ชื่อ "โฟลเดอร์" ที่เราต้องการถ่ายโอนอย่างสมบูรณ์

กดไลค์ / abc / defs /

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.