เป็นไปได้ไหมที่ SCP จากระยะไกลไปยังท้องถิ่นขณะที่ล็อกอินเข้าสู่ระยะไกลและไม่ทราบที่อยู่ IP ของท้องถิ่นนั้น


29

ฉันพบว่าตัวเองต้องการคัดลอกไฟล์จากเซสชันเทอร์มินัลระยะไกลไปยังเครื่องของฉันเป็นประจำ ฉันมักจะออกจากระบบของเซสชันระยะไกลและเรียกใช้การถ่ายโอน scp จากท้องถิ่นเพื่อคัดลอกไฟล์จากระยะไกลไปยังท้องถิ่น แต่นี่ให้ความรู้สึกที่ยืดเยื้อ ฉันต้องการถ่ายโอนไฟล์ในขณะที่ลงชื่อเข้าใช้รีโมตผ่าน SSH เพื่อประหยัดเวลา เครื่องท้องถิ่นของฉันเชื่อมต่อกับอินเทอร์เน็ตจากช่วง IP แบบไดนามิกดังนั้นฉันไม่เคยแน่ใจว่าจะเชื่อมต่อกับระยะไกลได้อย่างไร แต่แน่นอนว่าเมื่อเซสชันระยะไกลมาจากแล็ปท็อปของฉันต้องมีทางลัดใน scp เพื่อกลับไปที่แล็ปท็อปของฉัน ... ใช่ไหม

คำตอบ:


19

คุณสามารถใช้ได้ SSH tunneling สำหรับสิ่งนี้.

การใช้การทันเนลคุณสามารถส่งต่อพอร์ต TCP จากเครื่องท้องถิ่นไปยังเครื่องระยะไกลหรือจากเครื่องระยะไกลไปยังเครื่องท้องถิ่นของคุณ ฉันใช้บ่อยเพื่อส่งต่อเช่น พอร์ต SMTP หรือ IMAP จากเครื่องระยะไกลที่อยู่หลังไฟร์วอลล์ไปยังเครื่องท้องถิ่นของฉัน (จากนั้นเข้าถึงบริการในพื้นที่ราวกับว่ากำลังทำงานอยู่ภายในเครื่อง)

หากต้องการส่งต่อพอร์ต 22 (SSH) จากเครื่องในประเทศของคุณไปยังเครื่องระยะไกลลองทำดังนี้:

ssh -R12345:localhost:22 yourremoteuser@remotemachine

(โปรดทราบว่า localhost หมายถึงชื่อท้องถิ่นของเครื่องระยะไกล)

หลังจากรันสิ่งนี้คุณควรจะสามารถกลับบ้านโดยใช้:

ssh -p12345 yourlocaluser@127.0.0.1

เมื่อใช้ scp คุณจะทำสิ่งที่ชอบ (scp มีตัวพิมพ์ใหญ่ P สำหรับส่งต่อพอร์ต):

scp -P12345 filename 127.0.0.1:/tmp/filename

การส่งต่อพอร์ตในทิศทางอื่น (จากระยะไกลไปยังท้องถิ่น) ใช้ -L แทน -R

คำสั่งข้างต้นสมมติว่าคุณกำลังใช้งานไคลเอ็นต์ ssh ลูกค้ากราฟิกเช่น PuTTY สำหรับ Windows ยังรองรับการขุดอุโมงค์


ไม่ตอบคำถามของ OP ที่ IP ไม่คงที่

2
เว้นแต่ฉันจะพลาดบางสิ่งบางอย่างสิ่งนี้น่าจะดีสำหรับ OP เพื่อเชื่อมต่อจากเครื่องระยะไกลในปัจจุบันกลับสู่ท้องถิ่น การทันเนลจะทำผ่านเซสชัน SSH เมื่อการเชื่อมต่อ SSH ถูกตั้งค่าจากเครื่องโลคัลแบบไดนามิกไปเป็นรีโมตมันจะสำเร็จและจะสามารถตั้งค่าพอร์ตการรับฟังบนเครื่องระยะไกลที่รับสัญญาณกลับไปยังตำแหน่งที่มา

สิ่งนี้จะต้องใช้ OP เพื่อตั้งค่าเซิร์ฟเวอร์ SSH บนเครื่องของเขาและดูแลการตรวจสอบสิทธิ์ ดังนั้นนี่อาจเป็นปัญหามากกว่าค่าใช้จ่ายในบางกรณี
Septagram

ไม่เพียงแค่ทำงานได้กับ IP แบบไดนามิกเท่านั้น แต่ยังทำงานข้ามไฟร์วอลล์ที่ห้ามการเชื่อมต่อ ssh จากระยะไกลไปยังท้องถิ่น คำตอบที่มีประโยชน์มาก!

3
คุณสามารถทำให้สะดวกยิ่งขึ้นด้วยการตั้งค่าการส่งต่อพอร์ตระยะไกลด้วย ~C หนี. เพียงพิมพ์ <Enter>~C-R 12345:localhost:22<Enter>และคุณมีอุโมงค์ของคุณโดยไม่ต้องออกจากเซสชัน SSH ที่สร้างไว้แล้ว

4

ลองต่อไปนี้ในบรรทัดคำสั่งจากเครื่องระยะไกลคุณอาจต้องเปิดใช้งานการส่งต่อพอร์ตบนเราเตอร์ของคุณ

scp <file on remote machine> ${SSH_CLIENT%% *}:<directory on local machine>

ที่มา: scp ไฟล์กลับไปยังโฮสต์ที่คุณกำลังเชื่อมต่อได้อย่างง่ายดาย (commandlinefu.com)


เพื่ออธิบายสิ่งที่สิ่งนี้ทำเพื่อผู้คนที่พบสิ่งนี้ ${SSH_CLIENT%% *} ส่งออก IP ของเครื่องท้องถิ่นของคุณ ดังนั้นคำสั่งทั้งหมดจะเปิดเซสชัน scp จากเครื่องระยะไกลไปยังเครื่องท้องถิ่นของคุณสำหรับการถ่ายโอนไฟล์ สิ่งนี้สามารถทำได้ถ้าคุณสามารถ SSH ไปยังเครื่องท้องถิ่นของคุณจากเครื่องระยะไกล
bizi

สิ่งนี้สามารถปรับปรุงให้ดีขึ้นได้โดยการเพิ่มสิ่งที่ชอบ export ME="${SSH_CLIENT%% *}" ลงในไฟล์ shell rc ของคุณ จากนั้นคุณสามารถใช้ scp <file> $ME:<local path>
kralyk

1

อาจจะ zssh ?

zssh (Zmodem SSH) เป็นโปรแกรมสำหรับถ่ายโอนไฟล์แบบโต้ตอบไปยังเครื่องระยะไกลในขณะที่ใช้ secure shell (ssh) มันมีไว้เพื่อเป็นทางเลือกที่สะดวกในการสแกนโดยอนุญาตให้ถ่ายโอนไฟล์โดยไม่ต้องเปิดเซสชันอื่นและรับรองความถูกต้องของตัวเองอีกครั้ง

zssh เป็น wrapper แบบโต้ตอบสำหรับ ssh

มันใช้การยอมรับ rz, sz การใช้งานการถ่ายโอนไฟล์ zmodem


1

โหวตขึ้นคำถามนี้นี่คือสิ่งที่ฉันต้องการจะทำ อย่างง่ายดาย เช่นกัน

นี่คือคำตอบที่เกี่ยวข้อง: ฉันจะ SCP จากเครื่องระยะไกลไปยังเครื่องท้องถิ่นได้อย่างไรเมื่อฉันอยู่นอกเครือข่ายในบ้านของฉัน

คุณต้องอนุญาตการเข้าถึง ssh จากนอกเครือข่ายของคุณ สิ่งนี้ทำได้โดยการส่งต่อพอร์ตบนเราเตอร์บรอดแบนด์ของคุณไปยัง LAN ip ของเซิร์ฟเวอร์ของคุณ อย่างไรก็ตามมีข้อกังวลด้านความปลอดภัยเกี่ยวกับการอนุญาตให้เข้าถึง ssh จากภายนอกดังนั้นคุณอาจต้องการค้นหาวิธีการรักษาความปลอดภัย ssh, การตรวจสอบความถูกต้องโดยใช้คีย์และปิดใช้งานการตรวจสอบรหัสผ่านโดยสิ้นเชิง


0

ทางออกหนึ่งคือการหยุดเซสชัน ssh บนเครื่องโลคอลดำเนินการคัดลอกบนเครื่องโลคัลจากนั้นกลับสู่เซสชัน ssh ที่คุณออกไป

ตัวอย่างเช่นสมมติว่าฉันเชื่อมต่อกับ myuser @ ระยะไกล และฉันต้องการคัดลอกไฟล์ lol.txt ไปยังเครื่องคอมพิวเตอร์ของฉัน ก่อนอื่นฉันต้องการระงับ ssh บนเครื่องของฉัน โดยปกติคุณจะใช้ Ctrl - Z ที่จะระงับ แต่สิ่งนี้จะไม่ทำงานใน ssh เพราะมันจะถูกส่งไปยังเปลือกระยะไกล คุณต้องใช้ลำดับการหลีกเลี่ยง ssh แทน เข้าสู่ ~ . ดังนั้นเพื่อระงับการกด ssh เข้าสู่ ~ Ctrl - Z . ตอนนี้คุณสามารถเรียกใช้คำสั่งบนเครื่องท้องถิ่นของคุณและสามารถทำได้

user@localmachine:~$ scp user@remote:/path-to-file/lol.txt /dest-path/lol.txt

เพื่อคัดลอกไฟล์แล้วกลับไปที่ ssh ตรงที่คุณทิ้งไว้

user@localmachine:~$ fg


แต่ปัญหาไม่ได้คัดลอกจากระยะไกลปัญหาคือการคัดลอกไปยังระยะไกลฉันไม่เห็นวิธีการระงับเปลือกทำอะไรเพื่อที่อยู่ที่ ...
alex

มันก็ทำงานได้ดีเหมือนกัน แนวคิดคือคุณระงับเซสชันแทนการออกจากเซสชันซึ่งทำให้อย่างน้อยง่ายขึ้นเล็กน้อย
Time Sheep

0

หากคุณต้องการวิธีแก้ปัญหาที่ง่ายกว่าเพียงแค่เปิดบัญชีดรอปบ็อกซ์ไปที่เครื่องระยะไกลและทำการ wget (เวอร์ชั่นที่แก้ไขแล้วจาก ที่นี่ ): wget --no-check-certificate https://www.dropbox.com/s/2123jshf/ABC.pdf?dl=1 -O abc.pdf

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