วิธีการ ssh ไปยังเซิร์ฟเวอร์ภายในโดยใช้ชื่อโฮสต์โดยไม่มีชื่อโดเมน


10

ฉันต้องลงชื่อเข้าใช้เซิร์ฟเวอร์หลายเครื่องในที่ทำงานเพื่อให้งานของฉันเสร็จ ฉันเบื่อที่จะพิมพ์ FQDN ของเซิร์ฟเวอร์เพื่อเข้าถึง ฉันกำลังเข้า / ออกผ่าน ssh บนเครือข่ายส่วนตัวของเราเอง ฉัน 99% แน่ใจว่ามันอยู่ในเครือข่ายส่วนตัวของเราเอง b / c เซิร์ฟเวอร์ทั้งหมดมี ip addr 10.xyz มีวิธีการ ssh ในเซิร์ฟเวอร์ที่มีเพียงชื่อโฮสต์และไม่ใช่ชื่อโดเมนหรือไม่?

เรามีเซิร์ฟเวอร์ในหลายประเทศ วิธีการตั้งชื่อเซิร์ฟเวอร์ของเรานั้นยาวมาก มันมีชื่อดังนี้:

hostname.country.domainname.com

ฉันกำลังพิมพ์อุโมงค์ carpal ssh me@hostname1.country.domainname.com

... ทุกครั้งที่ฉันเข้าถึงเซิร์ฟเวอร์ของเรา หากฉันอยู่ในสหรัฐอเมริกาและฉันพยายามเข้าถึงโฮสต์อื่นที่อยู่ในสหรัฐอเมริกาฉันสามารถพิมพ์ssh me@hostname2และเชื่อมต่อได้ดี อย่างไรก็ตามหากฉันอยู่ในสหรัฐอเมริกาและพยายามเชื่อมต่อกับเซิร์ฟเวอร์ในอังกฤษฉันไม่สามารถพิมพ์ssh me@hostname3.engและเชื่อมต่อhostname3ได้

วิธีแก้ปัญหาที่ฉันทำคือตั้งค่านามแฝงในไฟล์ ~ / .ssh / config สำหรับเซิร์ฟเวอร์บางตัว อย่างไรก็ตามฉันคิดว่ามันเป็นไปไม่ได้ที่จะเพิ่มเซิร์ฟเวอร์ 1000+ ไฟล์ ฉันได้เพิ่มเซิร์ฟเวอร์มากกว่า 20+ เครื่องและเพื่อนร่วมงานของฉันคิดว่าฉันบ้าไปแล้ว แต่ฉันคิดว่าพวกเขาบ้าที่จะพิมพ์ FQDN เมื่อรอ

มีวิธีง่าย ๆ สำหรับเราในการตั้งค่าบางอย่างเพื่อให้เราไม่ต้องพิมพ์ชื่อโดเมนของเราในแต่ละครั้งหรือไม่?

คำตอบ:


18

คุณสามารถใช้สัญลักษณ์แทนและใช้%hในการกำหนดค่าของคุณ

เช่น

Host *.eng
  Hostname %h.domainname.com

ตอนนี้เมื่อคุณทำมันจะพยายามที่จะเชื่อมต่อไปยังssh foo.engfoo.eng.domainname.com

คุณสามารถเพิ่มตัวเลือกอื่น ๆ ในการกำหนดค่านี้เช่นกัน; เช่นบังคับให้ชื่อผู้ใช้

Host *.eng
  Hostname %h.domainname.com
  User me

ตอนนี้เมื่อคุณทำssh foo.engมันจะพยายามที่จะเชื่อมต่อไปยังเป็นผู้ใช้foo.eng.domainname.comme

% ssh foo.eng
ssh: Could not resolve hostname foo.eng.domainname.com: Name or service not known

(เห็นได้ชัดว่าฉันได้รับข้อผิดพลาดก่อนที่จะไม่ใช่ชื่อโฮสต์ที่ถูกต้องสำหรับฉัน!)

ดังนั้นตอนนี้คุณต้องการเพียงหนึ่งกฎต่อประเทศ


ความคิดแรกของฉันคือชื่อแทน DNS อย่างที่สองคือไฟล์โฮสต์ แต่ฉันพลาดว่ามีเซิร์ฟเวอร์หลายเครื่อง วิธีนี้ดูดีมาก บรรทัดใดที่คุณได้โพสต์ไว้
Xalorous

สิ่งนี้จะเข้าสู่$HOME/.ssh/configหรือคุณสามารถทำให้เป็นระบบได้/etc/ssh/ssh_config
Stephen Harris

ใช้งานได้user@*.engหรือไม่
Xalorous

3
ด้วยกฎที่ฉันเขียนคุณสามารถทำได้ssh foobar@somewhere.engและมันจะทำงานตามที่คาดไว้ ทั้งหมดนี้จะเขียนองค์ประกอบชื่อโฮสต์ มันยังจะทำงานร่วมกับscpและsftpและอื่น ๆ
Stephen Harris

9

หากคุณเพิ่ม

search domainname.com

การ/etc/resolv.confและการใช้งานhostname.country, ssh(และโปรแกรมเครือข่ายอื่น ๆ สำหรับเรื่องที่) โดยอัตโนมัติจะผนวกdomainname.comสำหรับคุณ1

ฉันไม่คิดว่าการเพิ่มโดเมนประเทศต่าง ๆ ลงในsearchเส้นทางของคุณเป็นความคิดที่ดีเพราะคุณอาจได้รับพฤติกรรมที่ไม่คาดคิดหากเซิร์ฟเวอร์สองเครื่องในสองประเทศที่ต่างกันใช้ชื่อโฮสต์เดียวกัน2

ฉันเชื่อว่าวิธีนี้ดีกว่าการเปลี่ยนการsshกำหนดค่าเพราะจะช่วยให้hostname.countryสามารถแก้ไขได้โดยไม่คำนึงถึงโปรแกรมที่คุณใช้ ( telnet, VNC, ... )

ดู resolv.conf(5)


1ถูกต้องมากขึ้นมันจะผนวกdomainname.comถ้ามันไม่สามารถแก้ไขhostname.countryด้วยตัวเอง

2ในสถานการณ์ดังกล่าวhostnameจะแก้ไขไปยังเซิร์ฟเวอร์ในประเทศที่มีโดเมนอยู่ในรายการก่อนในsearchเส้นทาง


2
BTW คุณสามารถทำสิ่งนี้ในรูปแบบที่ไม่ใช่รูทและต่อกระบวนการโดย env ตัวแปร LOCALDOMAIN man resolv.conf
rudimeier

วิธีนี้ใช้เพื่อแก้ปัญหาโฮสต์ SSH แต่ถ้าคุณใช้ GSS / Kerberos ชื่อจะไม่ตรงกันและ authing จะล้มเหลว
นิค T

7

คุณสามารถใช้CanonicalDomainsตัวเลือกในการกำหนดค่า ssh ของคุณ

การเพิ่มสิ่งต่อไปนี้ลงในไฟล์ ssh config ของคุณจะทำให้ ssh พยายามต่อท้ายdomainname.comกับโฮสต์ใด ๆ ที่มีอย่างน้อย 1 จุดในชื่อ:

CanonicalizeHostname yes
CanonicalDomains domainname.com

ด้วยการตั้งค่านี้ssh foo.engจะพยายามก่อนfoo.eng.domainname.comและย้อนกลับไปที่foo.engหากไม่พบโฮสต์ ในทำนองเดียวกันssh github.comจะลองก่อนgithub.com.domainname.comดังนั้นหากคุณต้องการเชื่อมต่อกับ GitHub เซิร์ฟเวอร์ DNS ของคุณไม่ควรส่งคืนระเบียนสำหรับโฮสต์ที่ไม่มีอยู่

CanonicalizeMaxDotsสามารถใช้ในการควบคุมวิธีการหลายจุดสามารถปรากฏในชื่อโฮสต์ก่อน SSH domainname.comเห็นว่ามันมีคุณสมบัติครบถ้วนและไม่ผนวก มันเริ่มต้นที่ 1 ซึ่งควรจะเพียงพอสำหรับคุณที่ได้รับแบบแผนที่คุณมีอยู่ในขณะนี้ แต่ถ้าคุณเคยได้รับบางสิ่งบางอย่างเช่นhostname.city.countryคุณจะต้องเพิ่มมัน

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