วิธีคัดลอกไฟล์จากเซิร์ฟเวอร์ระยะไกลไปยังเครื่องท้องถิ่นได้อย่างไร


238

ในเทอร์มินัลเชลล์ของฉันฉัน ssh'ed เป็นเซิร์ฟเวอร์ระยะไกลและฉันcdไปยังไดเรกทอรีที่ฉันต้องการ

ตอนนี้ในไดเรกทอรีนี้มีไฟล์ที่เรียกว่าที่ฉันต้องการจะคัดลอกไปยังเครื่องท้องถิ่นของฉันtable/home/me/Desktop

ฉันจะทำสิ่งนี้ได้อย่างไร

ฉันพยายามscp table /home/me/Desktopแต่มันมีข้อผิดพลาดเกี่ยวกับไฟล์หรือไดเรกทอรีดังกล่าว

ไม่มีใครรู้วิธีการทำเช่นนี้?


หากคุณพบว่าตัวเองกำลังคัดลอกด้วย scp บ่อยครั้งคุณสามารถติดตั้งรีโมตไดเร็กทอรีในเบราว์เซอร์ไฟล์และลากและวาง บน Ubuntu 15 โฮสต์ของฉันก็อยู่ภายใต้แถบเมนู "Go"> debian@10.42.4.66:/home/debian"ป้อนสถานที่ตั้ง"> อีกวิธีหนึ่งสามารถใช้sshfsเพื่อเมานต์ระบบไฟล์ของเครื่องระยะไกลบนโฮสต์ แต่การตั้งค่านั้นเกี่ยวข้องกับอีกเล็กน้อย
ConvexMartian

ให้rsyncลอง มันยิ่งใหญ่ทั้งสำเนาท้องถิ่นและระยะไกลช่วยให้คุณมีความคืบหน้าคัดลอก, ฯลฯตัวอย่างเช่น
sakisk

คำตอบ:


380

ไวยากรณ์สำหรับscpคือ:

หากคุณอยู่บนคอมพิวเตอร์ที่คุณต้องการส่งไฟล์ไปยังคอมพิวเตอร์ระยะไกล:

scp /file/to/send username@remote:/where/to/put

ที่นี่remoteสามารถเป็น FQDN หรือที่อยู่ IP

ในทางตรงกันข้ามหากคุณใช้คอมพิวเตอร์ที่ต้องการรับไฟล์จากคอมพิวเตอร์ระยะไกล:

scp username@remote:/file/to/send /where/to/put

scp ยังสามารถส่งไฟล์ระหว่างสองรีโมตโฮสต์:

scp username@remote_1:/file/to/send username@remote_2:/where/to/put

ดังนั้นไวยากรณ์พื้นฐานคือ:

scp username@source:/location/to/file username@destination:/where/to/put

คุณสามารถอ่านman scpเพื่อรับแนวคิดเพิ่มเติมเกี่ยวกับเรื่องนี้


4
ถ้าฉันต้องการคัดลอกหลายไฟล์ ฉันเพิ่มช่องว่างและเพิ่งใช้อีก /file/to/sendขอบคุณสำหรับคำตอบที่ยอดเยี่ยมของคุณ!
camdixon

6
scp -rจะคัดลอกซ้ำ
เฮนรี่

สิ่งที่ฉันต้องการที่จะคัดลอกไฟล์จากเครือข่ายเพื่อ VM ของฉัน ... วิธีการเพื่อให้บรรลุเดียวกันโดยใช้ SCP
Sushivam

2
@heemayl +1 สำหรับคำตอบที่ดี คิดว่าจะเพิ่มในกรณีที่เป็นการเชื่อมต่อที่ปลอดภัย (ที่ต้องมีการรับรองความถูกต้อง) คุณสามารถใช้ต่อไปนี้ (สำหรับการคัดลอกไฟล์จากท้องถิ่นสู่ระยะไกล): scp -i mykey.pem somefile.txt root@remotehost.ip.address : / some / folder / in / remote
Guy Avraham

1
ใช้scp -P 123เพื่อระบุพอร์ตที่กำหนดเอง
aexl

14

คุณสามารถใช้rsyncเป็นทางเลือก ส่วนใหญ่ใช้สำหรับการซิงค์ไฟล์ .. แต่คุณสามารถใช้เพื่อการนี้ได้เช่นกัน

rsync -avzh --stats --progress remoteuser@remoteip  localpath 

เพื่อเพิ่มตัวเลือก ssh:

rsync -e "ssh -P $port_value" remoteuser@remoteip  localpath

--progressและ--statsมีประโยชน์สำหรับการแสดงการถ่ายโอนแบบเรียลไทม์



8
scp username@ipaddress:pathtofile localsystempath

scp sadananad@ipaddress:/home/demo/public_html/myproject.tar.gz .

หากคุณใช้กับพอร์ต:

scp -Pportnumber username@ipaddress:pathtofile localsystempath 

scp -P2233 sadananad@ipaddress:/home/demo/public_html/myproject.tar.gz .

นี่จะเป็นการคัดลอกไฟล์ไปยังไดเรกทอรีระยะไกลเดียวกัน
Max Yudin

3

หากคุณสมบูรณ์ไว้วางใจทุกคนในเครือข่ายและคุณสามารถเชื่อมต่อพอร์ตของเครื่องปลายทางโดยตรงคุณสามารถใช้ ncnetcat:

สมมุติว่าที่อยู่ IP ของเครื่องปลายทางคือ 192.168.1.123

ในการเรียกใช้ปลายทาง:

nc -l -p 7777 0.0.0.0 | tar zxvf - -C dest_dir

คุณสามารถเลือกพอร์ตที่แตกต่างและผูกกับ IP อื่นของอินเทอร์เฟซของคุณ 0.0.0.0 เพียงแค่จับในทุกอินเตอร์เฟส

ในการเรียกใช้แหล่งที่มา:

tar zxcf - filename | nc 192.168.1.123 7777

IMHO นี่เป็นวิธีที่เร็วที่สุดในการส่งไฟล์จากคอมพิวเตอร์เครื่องหนึ่งไปยังอีกเครื่องหนึ่งโดยใช้เครือข่ายดิจิตอล

อาร์กิวเมนต์และตัวเลือกบรรทัดคำสั่งอาจเปลี่ยนแปลงเล็กน้อยระหว่างเวอร์ชันต่างๆncและtarแต่จะใช้งานได้กับลีนุกซ์รุ่นล่าสุด


2

บน Linux เพื่อคัดลอกโฟลเดอร์และเนื้อหาจากไดเรกทอรีผู้ใช้ (root ในตัวอย่างนี้) ไปยังโฟลเดอร์ในไดเรกทอรีผู้ใช้ในเครื่องฉันเรียกใช้คำสั่งนี้บนเครื่องโลคอล:

scp -r root@178.62.54.83: ~ / folderinremoteuserdir ~ / folderinlocaluserdir

สังเกตว่า ~ / ซึ่งฉันมักจะลืม ...

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