Làm thế nào để ssh đến máy chủ nội bộ bằng tên máy chủ mà không có tên miền?


10

Tôi cần phải đăng nhập vào nhiều máy chủ tại nơi làm việc để hoàn thành công việc của mình. Tôi cảm thấy mệt mỏi khi phải gõ FQDN của máy chủ để truy cập. Tôi đang đăng nhập / đăng xuất thông qua ssh trên mạng riêng của chúng tôi. Tôi chắc chắn 99% là trên mạng riêng của chúng tôi b / c tất cả các máy chủ đều có ip addr 10.xyz Có cách nào để ssh vào máy chủ chỉ với tên máy chủ chứ không phải tên miền không?

Chúng tôi có máy chủ ở nhiều quốc gia. Cách các máy chủ của chúng tôi được đặt tên là rất dài. Nó được đặt tên như sau:

hostname.country.domainname.com

Tôi đang nhận được đường hầm carpal gõ vào ssh me@hostname1.country.domainname.com

... Mỗi khi tôi truy cập vào một trong các máy chủ của chúng tôi. Nếu tôi ở Mỹ và tôi cố gắng truy cập một máy chủ khác ở Mỹ, tôi chỉ cần gõ ssh me@hostname2và tôi kết nối tốt. Tuy nhiên, nếu tôi ở Mỹ và cố gắng kết nối với máy chủ ở Anh, tôi không thể nhập ssh me@hostname3.engvà kết nối hostname3.

Cách giải quyết tôi đã làm là thiết lập bí danh trong tệp ~ / .ssh / config cho một số máy chủ. Tuy nhiên, tôi không nghĩ việc thêm 1000 máy chủ vào tệp đó là khả thi. Tôi đã thêm hơn 20 máy chủ và đồng nghiệp của tôi nghĩ rằng tôi bị điên, mặc dù tôi nghĩ họ thật điên rồ khi gõ FQDN khi sshing xung quanh.

Có cách nào dễ dàng để chúng tôi thiết lập một cái gì đó để chúng tôi không phải nhập tên miền của chúng tôi mỗi lần không?

Câu trả lời:


17

Bạn có thể ký tự đại diện và sử dụng %htrong cấu hình của bạn

ví dụ

Host *.eng
  Hostname %h.domainname.com

Bây giờ khi bạn làm điều ssh foo.engđó sẽ cố gắng kết nối foo.eng.domainname.com.

Bạn cũng có thể thêm các tùy chọn khác cho cấu hình này; ví dụ: buộc tên người dùng

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

Bây giờ khi bạn làm điều ssh foo.engđó sẽ cố gắng kết nối với foo.eng.domainname.comtư cách là người dùng me.

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

(tốt, rõ ràng là tôi gặp lỗi trước khi nó không phải là tên máy chủ hợp lệ đối với tôi!)

Vì vậy, bây giờ bạn chỉ cần một quy tắc cho mỗi quốc gia.


Suy nghĩ đầu tiên của tôi là bí danh DNS, thứ hai là tệp lưu trữ, nhưng tôi đã bỏ lỡ rằng có nhiều máy chủ. Giải pháp này có vẻ tuyệt vời. Cấu hình nào nhận được (các) dòng bạn đã đăng?
Xalious

Điều này đi vào $HOME/.ssh/confighoặc bạn có thể làm cho hệ thống rộng khắp/etc/ssh/ssh_config
Stephen Harris

Nó làm việc với user@*.eng?
Xalious

3
Với quy tắc tôi đã viết bạn có thể làm ssh foobar@somewhere.engvà nó sẽ hoạt động như mong đợi. Tất cả điều này không được viết lại thành phần tên máy chủ. Nó thậm chí sẽ làm việc với scpsftpvà vân vân.
Stephen Harris

9

Nếu bạn thêm

search domainname.com

đến /etc/resolv.confvà sử dụng hostname.country, ssh(và các chương trình mạng khác, cho vấn đề đó) sẽ tự động nối thêm domainname.comcho bạn 1 .

Tôi không nghĩ việc thêm các tên miền quốc gia khác nhau vào searchđường dẫn của mình là một ý tưởng hay vì bạn có thể gặp phải hành vi không mong muốn nếu hai máy chủ ở hai quốc gia khác nhau có chung tên máy chủ 2

Tôi tin rằng phương pháp này tốt hơn thay đổi sshcấu hình vì điều này cho phép hostname.countrygiải quyết bất kể chương trình bạn đang sử dụng ( telnet, VNC, ...).

Xem resolv.conf(5)


1 Chính xác hơn, nó sẽ xuất hiện domainname.comnếu nó không thể tự giải quyết hostname.country.

2 Trong trường hợp như vậy hostnamesẽ giải quyết cho máy chủ ở quốc gia có tên miền được liệt kê đầu tiên trong searchđường dẫn.


2
BTW bạn cũng có thể thực hiện điều này dưới dạng không root và theo quy trình bằng biến env LOCALDOMAIN. man resolv.conf
rudimeier

Điều này hoạt động để giải quyết máy chủ SSH, nhưng nếu bạn đang sử dụng GSS / Kerberos, tên sẽ không khớp và tự động sẽ thất bại.
Nick T

7

Bạn có thể sử dụng CanonicalDomainstùy chọn trong cấu hình ssh của bạn.

Thêm phần sau vào tệp cấu hình ssh của bạn sẽ khiến ssh cố gắng thêm domainname.comvào bất kỳ máy chủ nào có nhiều nhất 1 dấu chấm trong tên của nó:

CanonicalizeHostname yes
CanonicalDomains domainname.com

Với cấu hình ssh foo.engnày trước tiên sẽ thử foo.eng.domainname.comvà dự phòng foo.engnếu không thể tìm thấy máy chủ. Tương tự như vậy, ssh github.comtrước tiên sẽ thử github.com.domainname.com, vì vậy nếu bạn muốn kết nối với GitHub, máy chủ DNS của bạn không nên trả về các bản ghi cho các máy chủ không tồn tại.

CanonicalizeMaxDotsthể được sử dụng để kiểm soát số lượng dấu chấm có thể xuất hiện trong tên máy chủ trước khi ssh xem xét nó có đủ điều kiện và không nối thêm domainname.com. nó mặc định là 1, đủ để bạn đưa ra sơ đồ bạn hiện có, nhưng nếu bạn đã từng đạt được thứ gì đó giống như hostname.city.countrybạn sẽ cần phải tăng nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.