ssh ผ่านหลายโฮสต์


37

ในการไปยังเครื่องของฉันในสำนักงานของฉันในขณะนี้ฉันกำลังทำสิ่งนี้:

me@home:~$ ssh unix.university.com
me@unix:~$ ssh unix.department.univeristy.com
me@unix.department:~$ ssh office-machine.department.university.com
me@office-machine:~$ echo "This is very annoying"

มีวิธีง่าย ๆ ในการทำให้กระบวนการนี้เป็นอัตโนมัติหรืออาจเป็นคำสั่งเดียวที่ฉันสามารถใช้ได้เมื่อสิ้นสุด


คำตอบ:


31

คุณสามารถใช้ไคลเอ็นต์ ssh เพื่อดำเนินการ ssh บนเครื่องระยะไกลเมื่อเข้าสู่ระบบ

ssh -t unix.university.com \
    ssh -t unix.department.univeristy.com \
    ssh -t office-machine.department.university.com

(เหตุผลที่ฉันรวม-tไว้ในการร้องขอเป็นเพราะ ssh ให้ข้อผิดพลาดกับฉันอีกครั้ง: stdin ไม่ได้เป็นเทอร์มินัลเมื่อฉันลองใช้กับเครื่องของฉันเองเครื่องของคุณอาจแตกต่างออกไป)

เมื่อคุณออกจากเปลือกสุดท้ายกระบวนการจะ chain-exit ช่วยให้คุณพิมพ์Ctrl-Dซ้ำแล้วซ้ำอีก


โปรดทราบ: เพิ่ม "-t" เท่านั้นหากคุณเพิ่งเข้าสู่ระบบบนเครื่องระยะไกล ในการเริ่มต้นคำสั่งบนเครื่องระยะไกลอย่าวางไว้เพราะสามารถ / จะทำให้บางสิ่งเสียหาย (ตัวอย่างเช่น tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " :: อาจเสียหายได้ถ้าคุณเพิ่ม-t! ดูตัวอย่างคำตอบที่ยอดเยี่ยมของ StephaneChazelas unix.stackexchange.com/questions/151916/ … )
Olivier Dulac

3
การใช้ -J นั้นปลอดภัยกว่าคำตอบนี้เพราะคุณมีความเป็นไปได้ที่จะเก็บคีย์ ssh ทั้งหมดไว้ในคอมพิวเตอร์ของคุณ ตัวเลือก -J ถูกนำมาใช้ใน openssh รุ่น 7.3 ตามที่ระบุไว้ในคำตอบจาก @Miikka
Erik Sjölund

1
@ ErikSjölund Openssh ไม่อนุญาตให้มีมากกว่าหนึ่ง-Jตัวเลือก ฉันคิดว่าคุณสามารถทำได้ด้วยหลายProxyCommandตัวเลือกในการกำหนดค่าของคุณ
แอมเฟตามาจิ

1
@amphetamachine -Jคุณสามารถระบุรายการฮ็อพที่คั่นด้วยเครื่องหมายจุลภาค แต่การใช้ProxyCommandที่มีก็ยังคงเป็นวิธีการที่ดีกว่าคำตอบนี้ถ้าคุณเกิดขึ้นที่จะใช้รุ่นเก่าเกินไปที่จะสนับสนุน-W -J
kasperd

35

ใช่มีวิธีที่ยอดเยี่ยมในการทำเช่นนั้นโดยใช้ ssh ProxyCommand และ netcat

ใส่อะไรแบบนี้ลงใน. ssh / config

Host *.department.university.com
User me
ForwardAgent yes
ProxyCommand ssh unix.university.com nc %h %p

สิ่งนี้จะเข้าสู่เซิร์ฟเวอร์ใด ๆ . department.university.com โดยตรงโดยใช้โฮสต์กระโดด / bastion unix.university.com คุณอาจต้องใช้ stanza สำหรับ unix.university.com โดยตรง

นี่คือลิงค์อธิบายการทำงาน: http://backdrift.org/transparent-proxy-with-ssh

ด้วยเทคนิคนี้คุณสามารถเขียนได้ทันที

ssh unix.department.university.com

และมันจะปรากฏขึ้นโดยตรง เครื่องมืออย่าง rsync, scp, etc (อะไรก็ได้ใน stack ssh) ก็จะทำงานได้อย่างโปร่งใสเช่นกัน


2
+1 ฉันใช้สิ่งที่คล้ายกับสิ่งนี้เพื่อผลักดันข้อมูลจากเครือข่ายทดสอบไปยังเครือข่ายที่กำลังทำงานผ่านเซิร์ฟเวอร์ลำดับขั้น
Arcege

2
ใช่นี่ใช้งานได้ดี!
เกบ

15
เพียงเพื่อรุ่นที่ใหม่กว่าบันทึกของ ssh สนับสนุน-Wตัวเลือกคุณสามารถทำอะไรเช่นProxyCommand ssh -W %h:%p gatewayแทนที่จะขึ้นอยู่กับ NC
Ulrich Dangel

ดีแล้วที่รู้! ขอบคุณ
แอรอนบราวน์

2
ใช้งานได้ดีถ้าชื่อผู้ใช้เหมือนกันในเครื่องทุกเครื่อง ถ้ามันแตกต่างคุณต้องทำอะไรบางอย่างProxyCommand ssh -W %h:%p user@gateway
Riccardo Cossu

9

ใน OpenSSH 7.3 ssh เพิ่มการ-Jตั้งค่าสถานะบรรทัดคำสั่งและProxyJumpตัวเลือกการกำหนดค่าที่สอดคล้องกันเพื่อแก้ไขปัญหานี้อย่างแน่นอน

ให้เจ้าภาพที่คุณต้องการผ่าน SSH -Jเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคเพื่อ ตัวอย่างเช่น:

ssh -J unix.university.com,unix.department.university.com  \
  office-machine.department.university.com

-5

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

จะต้องค้นหาวิธีกำหนดค่ามัน

:)


คุณไม่ต้องการ (และอาจเป็นไปไม่ได้) เปิดพอร์ตหรือเกตเวย์ ssh มหาวิทยาลัยของคุณ ...
Stéphane Gimenez

9
หากคุณไม่ทราบวิธีการทำและไม่สามารถค้นหามันได้ทำไมคุณโพสต์คำตอบนี้
แอมเฟตามาจิน

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