มี ssh แก้ชื่อโฮสต์จากการตั้งค่าเมื่อใช้โหมด ProxyCommand และ netcat


16

ฉันพยายามที่จะตั้งค่าตัวเลือกสากลสำหรับการเชื่อมต่อ ssh ใหญ่ นี่คือ~/.ssh/configไฟล์ของฉันย่อ:

Host *%via
  ProxyCommand ssh gateway -W $(echo %h | cut -d%% -f1) %p

Host gateway
  HostName gateway.example.com
  User username
  ForwardAgent yes
  IdentityFile keypathg

Host target
  User username
  HostName target.example.com
  IdentityFile keypatht

เมื่อฉันใช้*%viaประโยชน์จากHostชื่อแทนฉันได้รับ:

% ssh -vvv target%via
OpenSSH_5.9p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/myuser/.ssh/config
debug1: /Users/myuser/.ssh/config line 5: Applying options for *
debug1: /Users/myuser/.ssh/config line 12: Applying options for *%via
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/myuser/.ssh/tmp/target%via_22_myuser" does not exist
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh -A gateway -W $(echo target%via | cut -d% -f1):22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/myuser/.ssh/id_rsa type -1
debug1: identity file /Users/myuser/.ssh/id_rsa-cert type -1
debug1: identity file /Users/myuser/.ssh/id_dsa type -1
debug1: identity file /Users/myuser/.ssh/id_dsa-cert type -1
ssh_exchange_identification: Connection closed by remote host

อย่างไรก็ตามถ้าฉันใช้

% ssh target.example.com%via

ฉันไปถึงเซิร์ฟเวอร์เป้าหมาย แต่เป็นผู้ใช้ที่ไม่ถูกต้องและไม่มีการรับรองความถูกต้อง pubkey

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

เวอร์ชัน ssh ของฉันคือ 5.9v1, เกตเวย์คือ 5.9v1, และเป้าหมายคือ 5.3p1 ฉันเชื่อว่า-Wได้รับการแนะนำใน 5.4 แต่ไม่ควรสำคัญสำหรับกล่องสุดท้ายในบรรทัด การใช้โรงเรียนที่เก่ากว่านั้นncไม่แตกต่างกัน

ฉันได้ตรวจสอบแล้วว่าฉันสามารถ ssh ไปยังแต่ละช่องในบรรทัดได้ด้วยตนเอง การทำเช่นนี้แสดงให้เห็นว่าข้อมูลชื่อโฮสต์นามแฝงไม่ผ่านเช่นเมื่ออยู่บนเกตเวย์ฉันไม่สามารถแต่ฉันสามารถssh target ssh target.example.comวิธีนี้ใช้ได้กับ pubkey auth เกตเวย์และเป้าหมายมีชื่อผู้ใช้เดียวกันโดยบังเอิญซึ่งเป็นสาเหตุที่ใช้งานได้หากไม่มีการผลักดันการกำหนดค่า

หากการตั้งค่าที่ForwardAgentคล้ายกันไม่สามารถส่งข้อมูลนี้ได้วิธีที่ปลอดภัยที่สุดในการแก้ไขคือให้รักษา. ssh / config บนเกตเวย์ด้วยข้อมูลนี้

คำตอบ:


14

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

นี่ไม่ใช่ProxyCommandปัญหา ProxyCommandเพียงแค่สั่งให้ลูกค้า SSH ท้องถิ่นที่จะทำบางสิ่งบางอย่างในการเตรียมความพร้อมก่อนที่จะพยายามที่จะพูดคุยกับลูกค้าระยะไกล ใช่ในตัวอย่างของเราเราพูดคุยกับอีกวาระหนึ่ง ssh แต่เซสชันนั้นกับ-Wเพียงแค่การป้อนข้อมูลของเราและส่งต่อไปยังเครื่องอื่น คุณสามารถคิดว่าเซสชั่นการเตรียมการที่เป็นอิสระอย่างสมบูรณ์ การเปรียบเทียบรถที่หลีกเลี่ยงไม่ได้: รถของคุณเป็นรถคันเดียวกันไม่ว่าคุณจะต้องนั่งเรือข้ามฟากเพื่อไปจากจุด A ถึงจุด B

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

มันเป็น.ssh/configปัญหารูปแบบ หมายเหตุบรรทัด debug1 ที่สองและสาม .ssh/configพวกเขารายการสิ่งที่บทโฮสต์จะถูกนำมาใช้จากคุณ คุณทราบว่าใช้$ ssh target.example.com%viaงานได้ แต่เป็นชื่อผู้ใช้และรหัสผิด stanza สำหรับHost targetไม่ถูกอ่าน (ซึ่งจะจัดเตรียมชื่อผู้ใช้และคีย์ไฟล์ที่ถูกต้อง) บทเพลงใดที่ใช้ และ**%via

วิธีรับตัวเลือกเหล่านี้ให้ผ่านได้อย่างไร ที่น่าสนใจก็คือ wildcard จับคู่กับสตริงความยาว 0 รายการ Host target*จะตรงกับtarget, target%via, และtarget.example.comtarget.example.com%via

ดังนั้นคุณถามคำถามจะตั้งค่า.ssh/configบนgatewayเครื่องช่วย ไม่มันจะไม่ มันจะไม่ถูกอ่าน ทุกอย่างเกิดขึ้นจากเครื่องท้องถิ่นของเรา

ทั้งหมดที่ฉันอธิบายเพียงคำตอบว่าทำไม$ ssh target.example.com%viaไม่ทำงาน

$ ssh target%viaคุณต้องการ ถูกต้องมันสะดวกกว่า แบบฟอร์มสั้นล้มเหลวเนื่องจากtargetไม่พบชื่อโฮสต์ มันไม่ได้แก้ไข ทำไมไม่ได้ไม่ได้ SSH พ่น: ssh: Could not resolve hostname target: Name or service not known? เพราะว่าProxyCommandได้มีการจัดตั้งเรียบร้อยแล้ว องค์ประกอบของการเชื่อมต่อ ssh ถูกสร้างขึ้น แต่ความล้มเหลวของชื่อโฮสต์กำลังเกิดขึ้นในขณะที่ไม่ได้คาดหวัง ฉันจะยื่นรายงานข้อผิดพลาดเกี่ยวกับเรื่องนี้เพื่อช่วยระบุว่าข้อมูลการดีบักสามารถปรับปรุงได้ที่ไหน

ความเห็นสุดท้าย:

ฉันชอบHost *%viaไวยากรณ์ มันสะอาด แต่ยืดหยุ่น ก่อนหน้านี้ฉันเคยเห็นHost *+*และใช้ทั้งส่วนแรกและส่วนสุดท้ายของ%h(ost)เพื่อกำหนดว่าจะไปที่ไหน แต่จะต้องใช้ความพยายามอีกเล็กน้อยเพื่อให้ได้ใจคุณ ลิงก์: http://wiki.gentoo.org/wiki/SSH_jump_host

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