หลาย 'โฮสต์ *' ใน ssh_config


27

ความเข้าใจของฉันเกี่ยวกับวิธีการทำงานของ ~ / .ssh / config คือแต่ละบรรทัด 'โฮสต์' จะมีผลสำหรับการจับคู่โฮสต์ใด ๆ หลังจากจุดนั้นในไฟล์กำหนดค่า

ฉันมีเซิร์ฟเวอร์ส่วนบุคคลและเซิร์ฟเวอร์ที่ทำงานที่ฉันต้องการเชื่อมต่อ ฉันกำลังพยายามทำสิ่งต่อไปนี้:

# การตั้งค่าทั่วไป
อัตโนมัติ ControlMaster
ControlPath ~/.ssh/controlmaster/%r@%h:% p
ForwardAgent ใช่
ForwardX11 ใช่
GSSAPIA การตรวจสอบหมายเลขที่
PubkeyAuthentication ใช่

# เซิร์ฟเวอร์ส่วนบุคคล
โฮสต์ *
ผู้ใช้ harleypig
IdentityFile ~ / .ssh / personal_id_rsa

โฮสต์ 1
ชื่อโฮสต์ host1.com

โฮสต์ที่ 2
ชื่อโฮสต์ host2.com

# เซิร์ฟเวอร์การทำงาน
โฮสต์ *
ผู้ใช้ alan.young
IdentityFile ~ / .ssh / work_id_rsa

โฮสต์ work1
ชื่อโฮสต์ work1.companyserver.com

โฮสต์ work2
ชื่อโฮสต์ work2.companyserver.com

โฮสต์ *
ผู้ใช้ devuser

โฮสต์ dev1
ชื่อโฮสต์ dev1.companyserver.com

โฮสต์ dev2
ชื่อโฮสต์ dev2.companyserver.com

เอกสารดูเหมือนจะบ่งชี้ว่า host1 และ host2 ควรใช้ 'personal_id_rsa' และผู้ใช้ harleypig work1, work2, dev1 และ dev2 ควรใช้ 'work_id_rsa' และสองรายการแรกควรเป็นผู้ใช้ 'alan.young' และ dev1 และ dev1 ควรเป็นผู้ใช้ 'devuser'

อย่างไรก็ตามสิ่งนี้ไม่ได้เกิดขึ้น อะไรก็ตามที่ 'โฮสต์ *' ที่ฉันใส่ไว้ก่อนคือสิ่งที่โฮสต์ต่อไปนี้พยายามเชื่อมต่อด้วย ฉันเข้าใจผิดหรือขาดอะไรไปหรือเปล่า


ขอบคุณระหว่างคำตอบทั้งสองนี้ฉันสามารถทำให้การเชื่อมต่อของฉันทำงานได้
harleypig

คำตอบ:


36

จากssh_configคู่มือ :

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

ดังนั้นในตัวอย่างของครอบครัวทั้งหมดจะใช้และUser harleypigIdentityFile ~/.ssh/personal_id_rsa

คิดว่าHostคำสั่งที่มี wildcard เป็นทางเลือก: ใช้การตั้งค่าต่อไปนี้เฉพาะเมื่อยังไม่ได้ตั้งค่า คุณต้องเขียนสิ่งนี้:

Host host1
Hostname host1.com
Host host2
Hostname host2.com
Host host*
User harleypig
IdentityFile ~/.ssh/personal_id_rsa

คุณสามารถใส่รูปแบบการหลายคนในสายถ้าชุดที่กำหนดของนามแฝงโฮสต์ไม่สามารถจับคู่กับสัญลักษณ์เช่นHostHost host* more* outlier


15

คุณทำผิดอย่างแน่นอน

  • คุณควรใส่Host *เป็นรายการสุดท้ายเสมอ
  • คุณไม่สามารถมีหลายHost *รายการ

หากเครื่องทำงานของคุณมีรูปแบบชื่อซึ่งคุณสามารถกำหนดให้เป้าหมายทั่วไปเป็นเครื่องทำงานได้เช่น machine1.work.com, host.work.com, fileserver.work.com จากนั้นคุณสามารถกำหนดเป้าหมายเครื่องงานของคุณเป็น:

Host *.work.com
User alan.young
IdentityFile ~/.ssh/work_id_rsa

เช่นเดียวกันกับเครื่องส่วนตัวของคุณ


สำหรับฉันการวางHost *ที่จุดเริ่มต้นของไฟล์ดูเหมือนว่าจะทำงานได้ดี บางทีความจริงที่ว่าคุณกำลังใช้ wildcard สำคัญกว่าความจริงที่ว่ามันเป็นรายการแรกเมื่อจัดลำดับความสำคัญ
Zaz

Btw Host *.work.comเป็นรูปแบบที่ไม่ถูกต้อง ใช้งานได้ในทางอื่นเท่านั้น:Host myserver*
Daniel Andrei Mincă

3
@ MincăDanielAndreiมันใช้งานได้ทั้งสองวิธีมันเป็นเพียงการแสดงออกของไวด์การ์ดและคุณสามารถใช้มันเป็นไวด์การ์ดอื่น ๆ ได้ โฮสต์ git-codecommit. *. amazonaws.com นี่เป็นตัวอย่างการทำงานจาก ~ / .ssh / config ของฉัน
Hameedullah Khan

@HameedullahKhan อย่างจริงจังฉันได้ลองแล้วมันไม่ตอบสนอง ถ้าคุณทำHost *subdomain.comมันจะไม่ตอบสนอง
Daniel Andrei Mincă

1
@ MincăDanielAndreiพฤติกรรมนั้นได้รับการบันทึกไว้ใน man pages ถ้ามันไม่ทำงาน (สำหรับฉันไม่ได้) มันเป็นจุดบกพร่อง
goetzc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.