เซิร์ฟเวอร์รีเลย์ SSH พร้อม OpenSSH


10

เป็นไปได้หรือไม่ที่จะใช้ OpenSSH เพื่อส่งต่อไปยังอุปกรณ์ที่เปิดใช้งาน SSH อื่น ๆ เช่นสวิตช์เราเตอร์เป็นต้นหากเป็นสิ่งที่สามารถทำได้โดยไม่ต้องสร้างแอปพลิเคชัน bespoke บน Linux ให้ทำหรือไม่

ขอบคุณ

คำตอบ:


9

แน่นอนว่า; เพียงแค่ใช้การส่งต่อพอร์ต / ช่องสัญญาณ SSH เริ่มการเชื่อมต่อ ssh กับเครื่อง "พร็อกซี" โดยใช้คำสั่งต่อไปนี้:

ssh -L$LOCALPORT:$REMOTEHOST:$SSHPORT $PROXYHOST
  • $PROXYHOST: เครื่องที่คุณสามารถเข้าถึง SSH ได้
  • $REMOTEHOST: เครื่องที่ $ PROXYHOST สามารถเชื่อมต่อได้ แต่คุณทำไม่ได้ ใช้ชื่อโฮสต์หรือ IP ที่$PROXYHOSTสามารถใช้เพื่ออ้างถึงเครื่อง
  • $SSHPORT: พอร์ตที่ sshd กำลังฟังบน remotehost; มีโอกาสมากที่สุด 22
  • $LOCALPORT: พอร์ตขาออกในเครื่อง SSH กำลังเปิดขึ้นบนเครื่องโลคัลของคุณและส่งต่อไปยังพอร์ต 22 $REMOTEHOST

ปล่อยให้การเชื่อมต่อนั้นขึ้นเพื่อให้อุโมงค์ทำงานได้ คุณอาจต้องการเพิ่มลง-Nในคำสั่งเพื่อให้การเชื่อมต่อนี้ไม่ทำให้เกิดเชลล์ระยะไกลและคุณจะไม่ปิดโดยไม่ตั้งใจในภายหลัง

เมื่อสร้างอุโมงค์แล้วให้ทำดังนี้:

ssh -p $LOCALPORT localhost

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


3

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

นี่คือสิ่งที่ฉันใช้ใน. ssh / config เพื่อเชื่อมต่อผ่านโฮสต์อื่น

Host internal-ssh-host-proxy
    ProxyCommand /usr/bin/ssh username@ssh-relay-host "/bin/netcat -w 1 internal-ssh-host 22"

ด้วยวิธีการข้างต้นคุณสามารถเรียกใช้คำสั่งssh internal-ssh-host-proxyจากเครื่องไคลเอ็นต์ของคุณ

หากโฮสต์ SSH พร็อกซีมีไคลเอนต์ OpenSSH 5.4 ขึ้นไปคุณไม่จำเป็นต้องใช้ netcat และคุณสามารถใช้โหมด netcat ในตัวแทน

Host internal-ssh-host-proxy
    ProxyCommand /usr/bin/ssh username@ssh-relay-host -W internal-ssh-host:22

ขออภัย แต่นี่ไม่ได้ใช้ OpenSSH คุณกำลังใช้ netcat เพื่อทำการส่งต่อระหว่างไคลเอนต์เซิร์ฟเวอร์และเซิร์ฟเวอร์หรือไม่?
aHunter

มันใช้ OpenSSH ร่วมกับยูทิลิตี้ทั่วไปที่มีอยู่เกือบทุกที่ มันไม่ใช่ ssh บริสุทธิ์ แต่ฉันจะไม่เรียกมันว่า bespoken
Zoredache

ไม่ฉันเห็นด้วยไม่ใช่ bespoke แต่ฉันต้องการทราบว่าเป็นไปได้ไหมที่จะถ่ายทอดโดยใช้ OpenSSH เพื่อให้คุณใช้ไคลเอ็นต์ ssh มาตรฐานและ ssh ไปยังกล่องที่ใช้ OpenSSH ซึ่งจะให้การเข้าถึง ssh กับเครื่องอื่นหรือหลายเครื่องโดยอัตโนมัติ ขอบคุณ
aHunter

1
@AHunter สำหรับบันทึกในขณะนี้มีโหมด 'netcat' ที่สร้างขึ้นใน openssh 5.4 ซึ่งทำให้มีการเชื่อมต่อ openssh แท้ๆ - blog.rootshell.be/2010/03/08/openssh-new-feature-netcat-modeไม่มีเครื่องมือภายนอก ต้องการ.
Zoredache

3

จากคำตอบที่นำเสนอ Zordache เป็นทางออกโดยรวมที่ดีที่สุด อย่างไรก็ตามสำหรับรุ่นหลังหากคุณต้องการเชื่อมต่อแบบเฉพาะกิจโดยไม่ต้องแก้ไขการตั้งค่าของคุณให้ใช้-tแฟล็กเพื่อจัดสรรเทอร์มินัลเทียมพร้อมกับดำเนินการ ssh โดยตรงบนรีเลย์

ssh -t relay.example.com ssh internal.example.com

วิธีการแก้ปัญหาที่ง่ายที่สุดโดยไม่ต้องแก้ไขไฟล์
Kartoch

2

คุณสามารถส่งต่อการเชื่อมต่อโดยอัตโนมัติโดยใช้ OpenSSH ใน~/.ssh/authorized_keysไฟล์ของคุณคุณสามารถระบุคำสั่งเพื่อดำเนินการซึ่งอาจเป็น SSH ไปยังเครื่องที่สอง

[ssh client] ----> [ssh relay server] ----> [ssh target server]
    you          modified authorized_keys      target machine

สิ่งที่คุณจะเห็นเมื่อได้รับแจ้งคือสองข้อความPassword:: หนึ่งรายการสำหรับเซิร์ฟเวอร์ส่งต่อและอีกหนึ่งรายการสำหรับเซิร์ฟเวอร์เป้าหมาย คุณสามารถลบพฤติกรรมนี้ได้ตลอดเวลาโดยใช้ใบรับรอง


ที่ฟังดูสมบูรณ์แบบคุณจะตั้งค่า sshd ใน openssh อย่างไร?
aHunter

อ้างถึงส่วนบน [คำสั่งบังคับ] [1] ที่ [1] eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html
sybreon

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