ฉันจะกำหนดค่าการเชื่อมต่อ SSH แบบย้อนกลับกับคอมพิวเตอร์ที่เชื่อมต่อได้อย่างไร


20

ฉันจะปรับใช้เครื่องจักรจำนวนมากในอนาคตอันใกล้ซึ่งจะอยู่หลังเราเตอร์ การตั้งค่า DNS แบบไดนามิกในแต่ละเราเตอร์และการส่งต่อพอร์ตเป็นไปไม่ได้ดังนั้นจะมีวิธีที่ฉันสามารถกำหนดค่าเครื่องเหล่านี้เพื่อเริ่มต้นการเชื่อมต่อ TCP กับคอมพิวเตอร์ของฉันแล้วให้คอมพิวเตอร์เริ่มการเชื่อมต่อ SSH กับคอมพิวเตอร์ระยะไกล การเชื่อมต่อนั้น?

IE:

COMPUTER A OPENS TCP CONNECTION TO COMPUTER B
COMPUTER B OPENS SSH CONNECTION OVER THE EXISTING TCP CONNECTION TO COMPUTER A
COMPUTER B NOW HAS SSH CONNECTION TO COMPUTER A

เป็นไปได้และถ้าเป็นเช่นนั้นฉันจะทำอย่างไร


2
ที่เกี่ยวข้อง (ทำงานอย่างไรและเพราะเหตุใด): การย้อนกลับของอุโมงค์ SSH ทำงานอย่างไร
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


21

ใน/etc/ssh/sshdสำหรับคอมพิวเตอร์ Bชุด:

AllowTcpForwarding yes
TCPKeepAlive yes

จากคอมพิวเตอร์ A :

$ ssh -R 2222:localhost:22 ip.of.computer.b

จากคอมพิวเตอร์ B :

$ ssh localhost -p 2222

โปรดทราบว่า 2222 เป็นหมายเลขพอร์ตสูงที่ฉันเลือก พอร์ตบนคอมพิวเตอร์ B นั้นจะถูกส่งสัญญาณกลับผ่านการเชื่อมต่อ SSH ที่เริ่มต้นบนคอมพิวเตอร์ A ถึงพอร์ต 22 หากคุณมีหลายเครื่องคุณควรใช้พอร์ตที่แตกต่างกันสำหรับแต่ละเครื่อง

สำหรับกรณีการใช้งานของคุณคุณอาจต้องการเรียกใช้จากสคริปต์เพื่อให้คุณสามารถทำให้มันเป็น daemon และพยายามเชื่อมต่ออีกครั้งหากลิงก์หลุด คุณอาจต้องการบัญชีพิเศษที่มีเปลือกเพียงแค่/bin/trueบนคอมพิวเตอร์ Bเพื่อจัดการการเชื่อมต่อที่เข้ามา จากนั้นคุณสามารถตั้งค่าคีย์เดียวหรือหลายคีย์สำหรับแต่ละเครื่องที่ได้รับอนุญาตให้ "โทรกลับบ้าน"

บนคอมพิวเตอร์ที่คุณอาจพบว่า-n, -Nและ-Tตัวเลือกที่มีประโยชน์ในการถอดออกจากการป้อนข้อมูลในท้องถิ่น (เพื่อที่จะสามารถทำงานในพื้นหลัง) ไม่พยายามที่จะเรียกใช้คำสั่งใด ๆ จากระยะไกลเพียงแค่เปิดอุโมงค์และไม่สร้าง TTY บริการ

วิธีปกติส่วนใหญ่ของการวางไข่ daemon นั้นทำงานได้ไม่ดีนักเมื่อตั้งค่าอุโมงค์เครือข่ายเช่นนี้ ปัญหาในการเชื่อมต่อเครือข่ายจะทำให้การพยายามฝ่ากำแพงให้ผ่านไปได้ การวนรอบอย่างง่ายพร้อมการนอนหลับเพื่อรอควรทำการหลอกลวง สิบนาทีเป็นตัวเลขที่ดีเพราะมันไม่ทำให้เครือข่ายและไฟล์บันทึกมีปัญหาหากมีปัญหา (เช่นComputer Bกำลังออฟไลน์) แต่ก็ยังทำให้คุณกลับมาใช้งานได้อย่างรวดเร็วหากการเชื่อมต่อขาดหาย

#/bin/sh
while true; do
    sleep $((60*10))
    ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done

/etc/rc.localสคริปต์เหมือนที่สามารถทำงานเปิดตัวในการบูต การเปลี่ยนแปลงครั้งแรกของคุณในการเข้าสู่เครื่องจะเริ่มประมาณสิบนาทีหลังจากบู๊ตคอมพิวเตอร์ A


1
ดี ดังนั้นโดยทั่วไปฉันจะให้แต่ละเครื่องระยะไกลอุโมงค์พอร์ตท้องถิ่น SSH ไปยังพอร์ตบนเครื่องท้องถิ่นหรือไม่ อาจเป็นการดีที่จะให้แต่ละเครื่องทำการเชื่อมต่อตามความต้องการ ฉันอาจให้แต่ละเครื่องเปิดการเชื่อมต่อ HTTP แบบ keep-alive และพุชข้อมูล XML เมื่อฉันต้องการให้พยายามเชื่อมต่อแบบย้อนกลับเพื่อให้การจัดการง่ายขึ้น (และไม่ขัดขวางพอร์ตทั้งหมดของฉัน;]) ขอบคุณ!
Naftuli Kay

@TKKocheran: มีพอร์ตให้เลือกไม่กี่ ... โดยเฉพาะมากกว่าที่คุณจะมีซุ้ม การเปิดอุโมงค์ SSH นั้นแย่กว่าการเปิดการเชื่อมต่อ http ไว้อย่างไร
คาเลบ

ฉันเดาว่าคุณถูกต้องฉันสามารถทำเช่นนั้นได้ แต่จากนั้นฉันต้องแมปพอร์ตไปยังเครื่องและจำไว้ว่าอันไหนในขณะที่เส้นทางอื่นจะถูกยกตัวอย่างอย่างเกียจคร้านนั่นคือสร้างอุโมงค์ SSH เท่านั้นเมื่อถูกถาม
Naftuli Kay

1
@TKKocheran: คุณจะต้องทำแผนที่ด้วยวิธีใดไม่งั้นแม้แต่การสร้างอินสแตนซ์ขี้เกียจของคุณก็จะต้องเจอกับสถานการณ์ที่พวกเขาพยายามปิดบังแต่ละคน
คาเลบ

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