ฉันมีชุดของไฟล์ซอฟต์แวร์ที่ดาวน์โหลดลงในไดเรกทอรีย่อย~/Downloadsของฉันบนคอมพิวเตอร์ส่วนบุคคลของฉัน sshนอกจากนี้ผมยังใช้ทุบตีเชื่อมต่อระยะไกลกับคอมพิวเตอร์โดยใช้
เป็นไปได้หรือไม่ที่จะโอนไฟล์นี้sshไปยังคอมพิวเตอร์ระยะไกล?
ฉันมีชุดของไฟล์ซอฟต์แวร์ที่ดาวน์โหลดลงในไดเรกทอรีย่อย~/Downloadsของฉันบนคอมพิวเตอร์ส่วนบุคคลของฉัน sshนอกจากนี้ผมยังใช้ทุบตีเชื่อมต่อระยะไกลกับคอมพิวเตอร์โดยใช้
เป็นไปได้หรือไม่ที่จะโอนไฟล์นี้sshไปยังคอมพิวเตอร์ระยะไกล?
คำตอบ:
คุณอาจต้องการใช้scpเพื่อจุดประสงค์นี้ เป็นวิธีที่ปลอดภัยในการถ่ายโอนไฟล์โดยใช้โปรโตคอล SSH
ตัวอย่างเช่นในการคัดลอกไฟล์yourfile.txtจาก~/Downloadsไปยังคอมพิวเตอร์ระยะไกลให้ใช้:
scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory
rsyncอาจใช้งานได้เช่นกันตอนนี้ที่ฉันคิดถึงมัน
scpข้างต้นด้วยrsyncและมันควรจะทำงานได้ดี
rsyncกับทุกสิ่งแม้แต่ไฟล์เดียวเพราะมัน "ใช้งานได้" ในกรณีง่าย ๆ และอาจมีประสิทธิภาพมากกว่าในกรณีอื่น ๆ หากใช้อย่างใดอย่างหนึ่งscpหรือrsyncอย่างอื่นที่ไม่ได้บีบอัดและ / หรือเข้ารหัสโปรดอย่าลืมเปิดตัวเลือกการบีบอัด ( -Cสำหรับscp , -zหรือ--compressสำหรับrsync) ในความเป็นจริงฉันเปิดใช้งานตามนิสัย - เป็นเรื่องยากมากที่คุณจะพบสถานการณ์ที่เคยทำให้สิ่งต่าง ๆ ช้าลง (บางทีถ้าคุณกำลังใช้อุปกรณ์ที่ใช้พลังงานต่ำช้าซึ่งมีกำลัง CPI ที่ จำกัด เช่น rPi)
แม้ว่าจะscpเป็นเครื่องมือที่เหมาะสมสำหรับเรื่องนี้อย่างชัดเจนแต่ด้วยเหตุผลบางอย่างคุณไม่สามารถใช้งานได้คุณสามารถทำสิ่งต่อไปนี้จากเครื่องโลคอลของคุณเพื่อคัดลอกพูดโครงสร้างไดเรกทอรีไปยังเครื่องระยะไกล:
tar -c . | ssh <remote> tar -x
นี้จะtarไดเรกทอรีปัจจุบันในเครื่องท้องถิ่นและเขียนว่าtarไปstdoutซึ่งจะแล้วได้รับการประปาไปยังsshคำสั่งที่จะดำเนินการคำสั่งจากระยะไกลเพื่อ Untar ไฟล์มันอ่านจากstdin
แก้ไขเพื่อสะท้อนความคิดเห็นของ Dietrich Epp เกี่ยวกับ-f -การเป็นค่าเริ่มต้นทั้งในการสร้างและการแตกปลายดังนั้นจึงไม่จำเป็นต้องระบุอย่างชัดเจน
-C basedirอาร์กิวเมนต์เพื่อtarแยกที่อื่นนอกเหนือจากไดเรกทอรีบ้านของคุณหากคุณทำเช่นนี้
หากคุณต้องการทำสิ่งนี้มากกว่าโอกาสที่หายากฉันขอแนะนำให้ติดตั้งระบบไฟล์ระยะไกลด้วยsshfsหากคุณใช้ Unix-like ที่รองรับ FUSE (Linux, * BSD, Mac OS X) สร้างไดเรกทอรีภายใต้โฮมไดเรกทอรีของคุณพูดชื่อ ~ / remote-server:
$ mkdir ~/remote-server
จากนั้นเมานต์ระบบไฟล์รีโมตด้วย sshfsแล้วติดตั้งระบบแฟ้มระยะไกลด้วยแทนที่ "yourserver.com" ด้วยชื่อโฮสต์ของเครื่องระยะไกลของคุณและ "ชื่อของไดเรกทอรีระยะไกล" ด้วยไดเรกทอรีที่คุณใช้ในระบบระยะไกล
$ sudo sshfs username@yourserver.com:/name/of/remote/directory ~/remote-server/
เมื่อเสร็จสิ้นแล้วรีโมตไดเร็กทอรีจะเป็นส่วนหนึ่งของระบบไฟล์ของคุณและคุณสามารถใช้เครื่องมือปกติทั้งหมดของคุณได้รวมถึง cp :
$ cp ~/Downloads/your-files ~/remote-server
หากคุณยังไม่ได้sshfsติดตั้งคุณควรจะสามารถติดตั้งลงในคอมพิวเตอร์ของคุณโดยใช้ตัวจัดการแพ็คเกจ (มองหาแพ็คเกจที่มีชื่อsshfsหรือfuse-sshfs) สำหรับข้อมูลเพิ่มเติมคุณสามารถอ่านบทช่วยสอนออนไลน์กวดวิชาออนไลน์
นี่เป็นวิธีที่ฉันชอบในการจัดการไฟล์บนเซิร์ฟเวอร์ระยะไกล ปกติฉันจะเก็บเซิร์ฟเวอร์ที่ใช้งานจริงหนึ่งตัวและเซิร์ฟเวอร์การพัฒนาสองตัวที่ติดตั้งด้วยวิธีนี้และใช้เวิร์กโฟลว์การเรียกดูไฟล์ปกติกับพวกเขา
-o idmap={none,user,file},gid=<remote_user_group_ID>,allow_otherและ-Cสำหรับการบีบอัดถ้าแบนด์วิดธ์ต่ำ ทันทีที่ใช้งานได้ดีฉันจะเพิ่มนามแฝงสำหรับคำสั่งเพื่อติดตั้งระบบไฟล์ที่อยู่ห่างไกลผ่าน ssh อย่างรวดเร็ว @Benjamin_Staton ฉันจะไม่ใช้ sudo หรือ root ที่นี่ไม่ใช่อย่างน้อยถ้าไม่มีการแมปผู้ใช้ / กลุ่มที่เหมาะสม
ครั้งแรกไม่มีความแตกต่างระหว่างจริงscp(คัดลอกไปssh ) และrsyncและ
การเรียกใช้ครั้งต่อไปจะได้รับประโยชน์จาก rsync ไม่ใช่การคัดลอกไฟล์ที่มีอยู่แล้ว
rsync -avH ~/Downloads username@remotehost:Downloads
-a สำหรับไฟล์ทั้งหมด-v สำหรับ verbose-H สำหรับ "เพียงแค่หา symlink และทำสิ่งที่ถูกต้อง"ธงที่มีประโยชน์อื่น ๆ ได้แก่ :
--delete เพื่อลบไฟล์ในปลายทางที่ไม่มีอยู่ในแหล่งที่มาอีกต่อไป--dry-run สำหรับการทดสอบ - --deleteมีประโยชน์มากเมื่อรวมกับการทำเช่นนี้จะใช้sshกุญแจในการเข้าสู่ระบบแบบไม่ใช้รหัสผ่านเช่นกันหากคุณตั้งค่าไว้
ในตอนท้ายของการเรียกใช้rsyncจะบอกให้คุณทราบว่าการทำสำเนาแบบธรรมดาซ้ำแล้วซ้ำอีกหลายครั้ง
-Hจริงๆแล้วสำหรับฮาร์ดลิงก์มันจะหยุดเนื้อหาเดียวกันที่ถูกส่งสองครั้งหรือมากกว่าเมื่อมันถูกลิงค์ไปยังมากกว่าหนึ่งแห่งในโครงสร้างไดเรกทอรีต้นทาง (แต่สามารถทำให้กระบวนการมีประสิทธิภาพน้อยลงสำหรับโครงสร้างไดเรกทอรีขนาดใหญ่) มันไม่มีผลต่อลิงก์สัญลักษณ์ แต่ตัวเลือกบางตัวที่รวมโดย-a/ --archiveไม่ส่งผลกระทบต่อวิธีการประมวลผล symlink
หากต้องการเพิ่มคำตอบข้างต้น บางครั้งฉันไม่แน่ใจเกี่ยวกับเส้นทางระยะไกล ในกรณีเหล่านี้ฉันใช้sftpเพื่อนำทางไปยังตำแหน่งที่ต้องการจากนั้นใช้รับหรือนำไปใช้เพื่อดาวน์โหลดหรืออัปโหลดไฟล์
หากคุณต้องการให้บางสิ่งบางอย่างซิงค์อยู่เสมอและแม้แต่ต้องการเรียกใช้ไฟล์บางไฟล์ในเครื่องที่อยู่บนเครื่องระยะไกลก็sshfsทำได้ดี
ฉันทำอะไรที่คล้ายกับ ssh ฉันสร้างเครื่องมือสร้างแบบกำหนดเองสำหรับ Visual Studio และฉันมี VS รันคำสั่ง ssh ที่คัดลอกรหัสของฉันไปยังคอมพิวเตอร์เป้าหมายแล้วคอมไพล์มันบนคอมพิวเตอร์เป้าหมายนั้น
ssh userB @ hostB 'cp /network/path/of/source/file.ext /path/of/final/file.ext; ./runCustomCommand'
สังเกตการใช้เครื่องหมายคำพูดเดี่ยวและเซมิโคลอน อดีต encapsulate คำสั่งของคุณเพื่อ hostB ผ่าน ssh และหลังช่วยให้คุณสามารถเรียกใช้หลายคำสั่งระบบ hostB ในหนึ่งคำสั่ง ssh จาก hostA
ในการทำงานนี้คุณจะต้องตั้งค่าคีย์ ssh บนเครื่องเริ่มต้นของคุณเพื่อให้คุณสามารถเป็น userA @ hostA และลงชื่อเข้าใช้ hostB ในฐานะผู้ใช้ B กระบวนการในการสร้างคีย์สาธารณะ ssh สำหรับ userA @ hostA นั้นได้รับการบันทึกไว้เป็นอย่างดี หากคุณไม่ได้สร้างพับลิกคีย์บน hostA สำหรับ userA และคัดลอกคีย์นั้นไปยังโฮสต์ B ในฐานะผู้ใช้ B คุณจะถูกบังคับให้ใส่รหัสผ่านของคุณทุกครั้ง
this file) และหลายไฟล์ (a series of software files) วิธีที่ดีที่สุดขึ้นอยู่กับว่าคุณมีไฟล์เดียวหรือหลายไฟล์