ถ่ายโอนไฟล์ผ่าน SSH [ปิด]


461

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

[Stewart:console/ebooks/discostat] jmm% scp -p ./styles/
usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 [...] [[user@]host2:]file2
[Stewart:console/ebooks/discostat] jmm%

ฉันต้องการถ่ายโอนไฟล์ทั้งสองทิศทาง จากสิ่งที่ฉันอ่านฉันคิดว่าคำสั่งดังกล่าวจะใช้งานได้สำหรับการดาวน์โหลดและscp -p [localpath] [remotepath]สำหรับการอัปโหลด?

คำตอบ:


735

คุณต้องการscpบางสิ่งบางอย่าง คุณมีscp ./styles/คุณกำลังพูดคัดลอกที่ปลอดภัย./styles/แต่ไม่ใช่ที่ที่จะคัดลอกไป

โดยทั่วไปหากคุณต้องการดาวน์โหลดมันจะไป:

# download: remote -> local
scp user@remote_host:remote_file local_file 

ที่local_fileจริงแล้วอาจเป็นไดเร็คทอรี่สำหรับวางไฟล์ที่คุณกำลังคัดลอกในการอัปโหลดมันเป็นสิ่งที่ตรงกันข้าม:

# upload: local -> remote
scp local_file user@remote_host:remote_file

-rหากคุณต้องการที่จะคัดลอกไดเรกทอรีทั้งหมดคุณจะต้อง คิดว่าscpเป็นเหมือนcpยกเว้นคุณสามารถระบุไฟล์ด้วยuser@remote_host:fileเช่นเดียวกับไฟล์ท้องถิ่น

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


2
โปรดทราบว่าหากผู้ใช้เหมือนกันบนรีโมตโฮสต์และโลคัลโฮสต์คุณสามารถละเว้นชื่อผู้ใช้: scp hello.c myserver.net:~/projects/
strager

ใช่จริงฉันจะเพิ่มบันทึกเกี่ยวกับเรื่องนั้น ฉันรวมผู้ใช้เพราะตัวอย่างที่ฉันให้จะใช้ได้ :)
lemnisca

ฉันมีความลำบากในเรื่องนี้ .. ถูกต้องแล้ว scp C: \ filename.txt server1 @ server2: home
Vincent

โปรดเพิ่มการจัดรูปแบบตัวหนาใน "donload" และ "อัปโหลด"
kursus

2
"เป็นธรรมชาติ" (ฉันพูดอย่างเป็นธรรมชาติเพราะฉันเพิ่งเสียเวลาไป 15 นาที) คุณไม่ควรเชื่อมต่อกับรีโมตโฮสต์ในขณะที่พยายาม "ดาวน์โหลด" ไปยังโลคอลเพราะถ้าคุณกำลังเรียกใช้รหัสจากอินสแตนซ์ระยะไกล "local" จะ ถูกตีความว่าเป็น "ระยะไกล" ถ้าคุณเห็นสิ่งที่ฉันหมายถึง ดังนั้นอย่าเรียกใช้ SSH ก่อน
PatrickT

164

หากการคัดลอกไปยัง / จากเครื่องเดสก์ท็อปของคุณใช้ WinSCP หรือหากบน Linux Nautilus รองรับ SCP ผ่านตัวเลือกเชื่อมต่อไปยังเซิร์ฟเวอร์

scp สามารถคัดลอกไฟล์ไปยังเครื่องที่ใช้ sshd เท่านั้นดังนั้นคุณต้องเรียกใช้ไคลเอ็นต์ซอฟต์แวร์บนเครื่องระยะไกลจากไฟล์ที่คุณใช้บน scp

หากการคัดลอกบนบรรทัดคำสั่งใช้:

# copy from local machine to remote machine
scp localfile user@host:/path/to/whereyouwant/thefile

หรือ

# copy from remote machine to local machine
scp user@host:/path/to/remotefile localfile

4
คุณคือผู้ชาย ฉันปรับใช้บล็อกในเวลาน้อยกว่า 10 วินาทีโดยไม่มีการติดตั้งเพิ่มเติมบนฝั่งเซิร์ฟเวอร์!
PM

2
มันทำงานได้อย่างสมบูรณ์แบบ ฉันใช้ msysgit เป็น cmd เนื่องจากมันมีทั้ง scp และ ssh
Ibn Saeed

3
มันทำงานได้อย่างสมบูรณ์แบบ ฉันใช้ scp * user @ host: / path / to / where
Bastin Robin

3
นั่นควรเป็นคำตอบที่ดีที่สุด
gsamaras

3
ขอบคุณสำหรับคำแนะนำ WinSCP วิธีที่ง่ายกว่าการพยายามที่จะเขียนคำสั่งทั้งหมดเหล่านั้นด้วยตนเอง ...
ไบรอัน Leishman

23

คุณต้องระบุทั้งต้นทางและปลายทางและหากคุณต้องการคัดลอกไดเรกทอรีคุณควรดูที่ตัวเลือก -r

ดังนั้นเพื่อคัดลอก / home / user / อะไรก็ตามจากเซิร์ฟเวอร์ระยะไกลไปยังไดเรกทอรีปัจจุบันของคุณ:

scp -pr user@remoteserver:whatever .

19

ไม่คุณยังต้องใช้scp [from] [to]วิธีการคัดลอก

ความแตกต่างคือคุณต้อง scp -p server:serverpath localpath


8
จุดประสงค์ของ -p คืออะไร
Qinjie

1
จากman scp: รักษาเวลาการแก้ไขเวลาการเข้าถึงและโหมดจากไฟล์ต้นฉบับ
pjmil

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