ssh multi-hop …ปรับคำสั่งให้เป็นไฟล์ ssh config


9

ฉันพยายามใส่คำสั่ง multi-hop ของฉันลงในไฟล์ ssh .ssh / config

นี่คือกราฟการเชื่อมต่อของฉัน: แล็ปท็อป (ฉันอยู่ที่นี่) ------> userver -------> เวิร์กสเตชัน

ฉันได้ใส่คีย์ rsh public ssh เป็น 'userver' และ 'เวิร์กสเตชัน' ในขณะนี้ฉันสามารถเชื่อมต่อโดยพิมพ์บรรทัดนี้:

ssh -A -t userserver@userver ssh -A userworkstation@workstation

อย่างไรก็ตามฉันต้องการที่จะสามารถใช้ความสามารถของไฟล์ปรับแต่งใน ~ / .ssh / config เพื่อให้ได้ผลเหมือนกัน แต่ใช้คำสั่งง่ายๆเพียงคำสั่งเดียวซึ่งจะทำให้ฉันสามารถทำสำเนาอย่างรวดเร็วด้วย 'scp' ปัญหาเดียวคือ 'userver' ไม่มีคำสั่ง "nc" และฉันไม่มี superuser อยู่ที่นั่นเพียงควบคุมโฟลเดอร์หลักของฉัน อย่างไรก็ตามฉันลองทำบางสิ่ง:

ฉันมีไฟล์ปรับแต่งนี้ในแล็ปท็อปของฉัน (~ / .ssh / config):

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user

อีกหนึ่งไฟล์ปรับแต่งใน userver (~ / .ssh / config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username

ด้วยไฟล์ปรับแต่งนี้ฉันสามารถเชื่อมต่อเป็น

ssh -A -t userver ssh -A workstation

ซึ่งเป็นการปรับปรุง แต่ไม่เพียงพอ ฉันพยายามเพิ่มโฮสต์อื่นในการกำหนดค่าแล็ปท็อปของฉันเช่นนี้:

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation

จากนั้นเมื่อฉันทำ

ssh hop

ฉันได้รับผลลัพธ์ต่อไปนี้พร้อมข้อผิดพลาดและไม่สามารถเชื่อมต่อได้:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found

ความคิดใด ๆ

คำตอบ:


6

ProxyCommandคำสั่งที่คุณอยู่ในความต้องการของการเป็น

คุณควรใส่ไฟล์. ssh / config ลงในบรรทัดเหล่านี้:

  Host userver
  HostName userver.example.com
  .........    

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22

ตอนนี้คุณสามารถเชื่อมต่อกับพีซีเวิร์กสเตชันได้แล้ว

  ssh worksation

หากนี่ยังไม่ชัดเจนหรือคุณต้องการรายละเอียดเพิ่มเติมผมแนะนำให้คุณอ่านบทแนะนำที่ยอดเยี่ยมนี้เกี่ยวกับ ssh multi-hopping

แก้ไข:

คุณสามารถกำหนดนามแฝงได้เสมอ: ในไฟล์ /home/your_name/.bashrc ของคุณให้เพิ่มบรรทัดนี้:

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 

(ฉันได้ใส่-Xตัวเลือกเพื่อให้คุณสามารถเรียกใช้แอปพลิเคชั่นกราฟิกบนเซิร์ฟเวอร์ระยะไกลดูพวกมันในเครื่องถ้าคุณไม่ต้องการให้ทำแบบนี้-X)


สวัสดี MariusMatutiae ฉันลองใช้วิธีแก้ปัญหาของคุณแล้ว แต่อย่างที่ฉันพูดในโพสต์ดั้งเดิมโหนด 'userver' ขาดโปรแกรม netcat (NC) ดังนั้นฉันจึงได้รับข้อผิดพลาดนี้: เวิร์กสเตชัน ssh ทุบตี: nc: คำสั่งไม่พบ ssh_exchange_identification: การเชื่อมต่อปิดโดยโฮสต์ระยะไกล
labotsirc

คุณติดตั้งไม่ได้เหรอ?
MariusMatutiae

น่าเสียดายที่ไม่มีฉันไม่มี superuser ใน 'userver' นั่นคือเหตุผลที่ฉันลองใช้วิธีอื่น ฉันไม่เข้าใจเลยถ้าใช้งานได้ "ssh -A-t userver ssh -A เวิร์กสเตชัน" ทำไมใส่แบบเดียวกันบน ProxyCommand ไม่ได้?
labotsirc

1
@labotsirc ฉันได้แก้ไขคำตอบของฉันเล็กน้อย หวังว่าคุณจะพบว่ามีประโยชน์ หรือคุณอาจลองติดตั้ง netcat แบบโลคัล (เช่นสำหรับคุณเท่านั้น!) เพิ่มในคำสั่งพร็อกซีบรรทัด .... เส้นทางแบบเต็มไปยังสำเนา netcat ของคุณเอง ฉันไม่แน่ใจว่าใช้งานได้เนื่องจากสิทธิ์ แต่คุณสามารถลองใช้ได้
MariusMatutiae

คัดลอกไบนารี netcat ของฉันลบตัวเลือก -q0 เนื่องจากได้รับข้อผิดพลาดและตอนนี้ก็ใช้งานได้! ขอบคุณ
labotsirc

10

ฉันพบวิธีแก้ไขปัญหาต่อไปนี้เพื่อให้ทำงานได้ดีกว่าการใช้ netcat ( nc) ตามตัวอย่างอื่น ๆ ด้วย netcat การเชื่อมต่อของฉันช้ามากและจะหยุดซ้ำ ๆ จนกว่าฉันจะกดปุ่มบางปุ่ม นอกจากนี้คุณไม่จำเป็นต้องติดตั้ง netcat

เพิ่มสิ่งต่อไปนี้ในของคุณ~/.ssh/config:

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p

จากนั้นคุณสามารถ ssh เช่นนี้:

ssh workstation

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

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