ฉันจะคัดลอกโฟลเดอร์จากระยะไกลไปยังโฮสต์ในพื้นที่ได้scp
อย่างไร?
ฉันใช้ssh
เพื่อเข้าสู่ระบบเซิร์ฟเวอร์ของฉัน
จากนั้นผมอยากจะคัดลอกโฟลเดอร์ระยะไกลเพื่อท้องถิ่นfoo
/home/user/Desktop
ฉันจะบรรลุสิ่งนี้ได้อย่างไร
ฉันจะคัดลอกโฟลเดอร์จากระยะไกลไปยังโฮสต์ในพื้นที่ได้scp
อย่างไร?
ฉันใช้ssh
เพื่อเข้าสู่ระบบเซิร์ฟเวอร์ของฉัน
จากนั้นผมอยากจะคัดลอกโฟลเดอร์ระยะไกลเพื่อท้องถิ่นfoo
/home/user/Desktop
ฉันจะบรรลุสิ่งนี้ได้อย่างไร
คำตอบ:
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/
โดยไม่รวมส่วนท้าย '/' ที่ส่วนท้ายของ foo คุณจะย้ายไดเรกทอรีเอง (รวมถึงเนื้อหา) มากกว่าเฉพาะเนื้อหาของไดเรกทอรี
จากman scp
(ดูคู่มือออนไลน์ )
-r ซ้ำไดเรกทอรีทั้งหมด
-C
ธงเพิ่มการบีบอัดและ-c
ธงช่วยให้คุณสามารถผ่านประเภทตัวเลขอื่น ๆ เพื่อประสิทธิภาพที่ดีขึ้นscp -c blowfish a@b:something .
ดังที่เห็นในคำตอบของ dimuthu
Desktop/foo
หรือคุณจะมีDesktop/allcontentsofFooGohere
SCP ดูเหมือนจะทำหน้าที่แปลก ๆ กับฉันมันทำสิ่งหนึ่งแล้วอีกอย่างหนึ่ง
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/
Desktop/foo
ด้วยscp -r user@your.server.example.com:/path/to/foo/. /home/user/Desktop/
คุณจะจบลงด้วยเนื้อหาของfoo
ในDesktop
และ dirs ย่อยทั้งหมดของfoo
เกลื่อนไปด้วยDesktop
ในการใช้พลังของSCPอย่างเต็มที่คุณต้องทำตามขั้นตอนต่อไปนี้:
จากนั้นยกตัวอย่างเช่นถ้าคุณมีนี้~ / .ssh / config :
Host test
User testuser
HostName test-site.com
Port 22022
Host prod
User produser
HostName production-site.com
Port 22022
คุณจะบันทึกตัวคุณเองจากการป้อนรหัสผ่านและทำให้ไวยากรณ์ของscp เป็นดังนี้:
scp -r prod:/path/foo /home/user/Desktop # copy to local
scp -r prod:/path/foo test:/tmp # copy from remote prod to remote test
ยิ่งไปกว่านั้นคุณจะสามารถใช้เส้นทางที่สำเร็จจากระยะไกลได้:
scp test:/var/log/ # press tab twice
Display all 151 possibilities? (y or n)
ปรับปรุง:
สำหรับการเปิดใช้งาน bash-completion สำเร็จจากระยะไกลคุณจำเป็นต้องมี bash-shell ทั้งบน<source>
และ<target>
โฮสต์และใช้งานได้อย่างสมบูรณ์ สำหรับข้อมูลเพิ่มเติมดูคำถามที่เกี่ยวข้อง:
วิธีเปิดใช้งานการเติมข้อความอัตโนมัติสำหรับเส้นทางระยะไกลเมื่อใช้ scp
SCP แท็บชื่อไฟล์สมบูรณ์
ในการคัดลอกทั้งหมดจากท้องถิ่นที่อยู่ในการระยะไกลสถานที่ตั้ง (อัพโหลด)
scp -r /path/from/destination username@hostname:/path/to/destination
หากต้องการคัดลอกทั้งหมดจากระยะไกลไปยังตำแหน่งท้องถิ่น (ดาวน์โหลด)
scp -r username@hostname:/path/from/destination /path/to/destination
Custom Port โดยที่xxxx
เป็นหมายเลขพอร์ตที่กำหนดเอง
scp -r -P xxxx username@hostname:/path/from/destination /path/to/destination
คัดลอกในไดเรกทอรีปัจจุบันจากระยะไกลเป็นท้องถิ่น
scp -r username@hostname:/path/from/file .
ช่วยด้วย:
-r
คัดลอกไดเรกทอรีและไฟล์ทั้งหมดซ้ำ ๆ/
ตำแหน่งเต็มโดยpwd
scp
จะแทนที่ไฟล์ที่มีอยู่ทั้งหมดhostname
จะเป็นชื่อโฮสต์หรือที่อยู่ IP-P portnumber
หมายเหตุ:บางครั้งพอร์ตที่กำหนดเองจะไม่ทำงานเนื่องจากพอร์ตไม่ได้รับอนุญาตในไฟร์วอลล์ดังนั้นตรวจสอบให้แน่ใจว่าพอร์ตที่กำหนดเองได้รับอนุญาตในไฟร์วอลล์สำหรับการเชื่อมต่อขาเข้าและขาออก
pwd
เพื่อรับตำแหน่งและใช้งานเหมือนกัน
สิ่งที่ฉันมักจะใช้คือ:
scp -r username@IP:/path/to/server/source/folder/ .
. (dot) : current folder
มันหมายความว่า ดังนั้นคัดลอกจากเซิร์ฟเวอร์และวางที่นี่เท่านั้น
IP : อาจเป็นที่อยู่ IP 125.55.41.311
หรืออาจเป็นโฮสต์ns1.mysite.com
ได้
.
หมายถึงไดเรกทอรีปัจจุบัน!
ดีกว่าที่จะบีบอัดแคตตาล็อกครั้งแรกบนเซิร์ฟเวอร์ระยะไกล:
tar czfP backup.tar.gz /path/to/catalog
ประการที่สองดาวน์โหลดจากระยะไกล:
scp user@your.server.example.com:/path/to/backup.tar.gz .
ในตอนท้ายให้แตกไฟล์:
tar -xzvf backup.tar.gz
-C
scp -C a@b:bigfile .
และถ้าคุณมีไฟล์หนึ่งไฟล์ให้ดาวน์โหลดจากที่ตั้งระยะไกลและถ้าคุณไม่ค่อยใส่ใจเรื่องความปลอดภัยลองเปลี่ยนการเข้ารหัสแบบเริ่มต้น scp (Triple-DES) ไปเป็นบางอย่างเช่น 'ปักเป้า'
นี่จะลดเวลาการคัดลอกไฟล์ลงอย่างมาก
scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/
arcfour
ในสถานที่ของblowfish
แต่มันก็มีข้อบกพร่องของการรักษาความปลอดภัย
สถานการณ์ทั่วไป
scp -r -P port username@ip:/path-to-folder .
อธิบายด้วยตัวอย่าง
scp -r -P 27000 abc@10.70.12.12:/tmp/hotel_dump .
ที่ไหน
port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory
ไปที่ไฟล์บนแถบเครื่องมือเอกภาพของคุณ
กด Ctrl + l แล้วเขียน here_goes_your_user_name@192.168.10.123
192.168.1.103 เป็นโฮสต์ที่คุณต้องการเชื่อมต่อ
ตัวอย่างหนึ่งที่นี่
คำถามคือวิธีการคัดลอกโฟลเดอร์จากระยะไกลไปยังท้องถิ่นด้วยscp
คำสั่ง
$ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir
แต่นี่เป็นวิธีที่ดีกว่าสำหรับsftp
- SSH File Transfer Protocol (เช่น Secure File Transfer Protocol หรือ SFTP) เป็นโปรโตคอลเครือข่ายที่ให้การเข้าถึงไฟล์การถ่ายโอนไฟล์และการจัดการไฟล์ผ่านสตรีมข้อมูลที่เชื่อถือได้ (wikipedia)
$ sftp user_remote@remote_ip
sftp> cd /path/to/remoteDir
sftp> get -r remoteDir
Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00
สำหรับความช่วยเหลือเกี่ยวกับsftp
คำสั่งเพียงแค่พิมพ์หรือhelp
?
ในกรณีที่คุณพบปัญหา"การตรวจสอบสิทธิ์ล้มเหลวมากเกินไป"ให้ระบุคีย์ SSH ที่คุณเพิ่มลงในเซิร์ฟเวอร์ ssh ของ severs:
scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir
ฉันไม่รู้ว่าทำไม แต่ฉันต้องใช้โลคัลโฟลเดอร์ก่อนคำสั่งเซิร์ฟเวอร์ต้นทาง เพื่อให้มันทำงาน
scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/
root@