ฉันมีชุดของไฟล์ซอฟต์แวร์ที่ดาวน์โหลดลงในไดเรกทอรีย่อย~/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
) วิธีที่ดีที่สุดขึ้นอยู่กับว่าคุณมีไฟล์เดียวหรือหลายไฟล์