แก้ไขการตั้งค่าไฟล์ ssh config เพื่อ tunnel ไปยังเครื่องที่ 3


20

ฉันกำลังพยายามอุโมงค์ไปยังเซิร์ฟเวอร์ผ่านเซิร์ฟเวอร์บริดจ์ จนถึงตอนนี้ฉันสามารถทำให้มันใช้งานได้จากเชลล์คำสั่งอย่างถูกต้องโดยใช้คำสั่งต่อไปนี้:

ssh -A -t bridge_userid@bridgemachine.com ssh -A remote_userid@remoteserver.com

แต่ฉันพยายามที่จะรวม~/.ssh/configไฟล์นี้ไว้ในไฟล์ของฉันและฉันมีปัญหา ฉันได้พยายาม:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -A -t bridge_userid@bridge_userid.com ssh -A remote_userid@%h

แต่เมื่อฉันทำฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้remoteserver.comและฉันไม่แน่ใจว่าเกิดจากอะไร:

ksh: SSH-2.0-OpenSSH_6.8 ^ M: ไม่พบ

ฉันรู้ว่าเมื่อฉันเข้าสู่เปลือกของฉันคือremoteserver.com/usr/bin/ksh

ฉันพยายามเพิ่มพา ธ อาร์กิวเมนต์ไปยังคำสั่ง ssh ในไฟล์ปรับแต่ง แต่มันก็ไม่ต่างกัน

ความคิดใด ๆ ที่สามารถเป็นได้?


นั่นไม่ใช่วิธีProxyCommandการใช้งาน โดยทั่วไปจะใช้กับ netcat โดยที่ ssh กำลังไพพ์เอาต์พุตผ่านมันและ netcat ทำหน้าที่เป็นช่องสัญญาณไปยังพอร์ต SSH ของremoteserver คุณต้องการ ProxyCommand เช่นssh -W %h:%p bridge_userid@bridgemachine.comถ้าคุณต้องการใช้คุณสมบัตินั้น
DanSut

น่าเสียดายเซิร์ฟเวอร์บริดจ์ของฉันไม่ได้ติดตั้ง netcat ไว้ดังนั้นฉันจึงพยายามทำให้มันทำงานได้อย่างอื่น ฉันคิดว่ามันสามารถทำงานได้จากบรรทัดคำสั่งควรมีวิธีการใส่ข้อมูลในไฟล์ปรับแต่ง
Eric B.

ในการใช้งานบรรทัดคำสั่งของคุณที่ใช้งานได้คุณกำลังให้ssh -A remote_userid@remoteserver.comเป็นคำสั่งให้รันบนเครื่องบริดจ์การกำหนดค่าไม่ได้ให้วิธีการในการจัดหาคำสั่งเริ่มต้น สิ่งที่คุณพยายามทำworksในตัวของมันเอง แต่จากนั้น ssh พยายามที่จะใช้ProxyCommandเป็นอุโมงค์และเริ่มยิงโพรโทคอล SSH ลงที่ซึ่งมีเชลล์รออยู่ที่ปลายอีกด้านแทนที่จะเป็น sshd กำลังฟังโปรโตคอล SSH
DanSut

@dansut ทำงานได้ดี ขอบคุณ!
Eric B.

คำตอบ:


25

คำตอบของ Jakujeนั้นถูกต้อง แต่เนื่องจาก OpenSSH 7.3คุณสามารถใช้งาน-J ProxyJumpได้ง่ายกว่า ดูบันทึกของฉัน:

OpenSSH 7.3หรือสูงกว่า

ProxyJumpใช้ ตามที่อธิบายไว้ในคู่มือ:

-J [user @] host [: port]
เชื่อมต่อกับโฮสต์เป้าหมายโดยทำการเชื่อมต่อ ssh ไปยัง jump host จากนั้นสร้าง TCP forwarding ไปยังปลายทางสุดท้ายจากที่นั่น อาจระบุกระโดดกระโดดหลายรายการคั่นด้วยอักขระจุลภาค นี่คือทางลัดเพื่อระบุคำสั่งกำหนดค่า ProxyJump

~/.ssh/configตัวอย่างProxyJump

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2_behind_server1
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyJump server1

เชื่อมต่อกับ

ssh server2_behind_server1 -v

เพิ่ม-vเอาต์พุตแบบละเอียด

-Jตัวอย่างบรรทัดคำสั่งProxyJump

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa

เชื่อมต่อกับ

ssh server2 -J server1 -v

หรือใช้ -o

ssh server2 -o 'ProxyJump server1' -v

OpenSSH 5.4หรือสูงกว่า

ใช้ProxyCommandกับ-W

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 -W %h:%p

เชื่อมต่อกับ

ssh server2 -v

หรือใช้ -o

ssh server2 -o 'ProxyCommand ssh server1 -W %h:%p' -v

ตะโกน OpenSSH 5.4

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 nc %h %p 2> /dev/null

เชื่อมต่อกับ:

ssh server2 -v

หรือใช้ -o

ssh server2 -o 'ProxyCommand ssh server1 nc %h %p 2> /dev/null' -v

แหล่งที่มา

-Jเพิ่มในOpenSSH 7.3

  • ssh (1): เพิ่มตัวเลือก ProxyJump และแฟล็กบรรทัดคำสั่ง -J ที่สอดคล้องกันเพื่ออนุญาตให้มีการเปลี่ยนทิศทางแบบง่ายผ่านหนึ่ง SSH bastions หรือ "กระโดดโฮสต์"

-Wเพิ่มในOpenSSH 5.4

  • เพิ่ม 'โหมด netcat' เป็น ssh (1): "ssh -W host: port ... " นี่เชื่อมต่อ stdio บนไคลเอนต์ไปยังพอร์ตเดียวไปข้างหน้าบนเซิร์ฟเวอร์ ซึ่งอนุญาตให้ใช้ตัวอย่างเช่นใช้ ssh เป็น ProxyCommand เพื่อกำหนดเส้นทางการเชื่อมต่อผ่านเซิร์ฟเวอร์กลาง BZ # 1618

3

คุณไม่จำเป็นต้องnetcatอยู่บนสะพาน ตามที่ DanSut เสนอไว้ในความคิดเห็นคุณสามารถใช้ssh -Wตัวเลือกบรรทัดคำสั่งแทนการกำหนดค่านี้ควรใช้กับคุณ:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -AW %h:%p bridge_userid@bridge_userid.com

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