Có thể đặt bí danh một tên máy chủ trong Linux không?


90

Có thể đặt bí danh một tên máy chủ trong Linux không?

Nó đã được jmillikin hỏi tại nhiều diễn đàn Ubuntu như sau:


Có thể tạo một bí danh tên máy chủ? Sắp xếp like / etc / hosts, nhưng với các tên máy chủ khác thay vì địa chỉ IP. Vì vậy, với một số tệp như thế này, bạn có thể ping "fakehost1" và nó sẽ được ánh xạ lại thành "realhost", và sau đó "realhost" sẽ được phân giải thành địa chỉ IP.

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

Ai đó đã trả lời về ssh, nhưng không phải về ping, v.v ... Mục đích chính của tôi là sử dụng nó làm bí danh cho máy chủ Subversion . Trong trường hợp của tôi, realhost nằm dưới một địa chỉ IP động. Vì vậy, bí danh "/ etc / hosts" không hoạt động. Tôi muốn truy cập máy chủ Subversion của tôi svn://my_svnserver/my_reposthay vì svn://realhost/my_repos.


Tôi đoán tôi có thể đang thiếu một cái gì đó. Bạn có nói rằng bạn không thể có / etc / hosts trông giống như 10.0.3.4 some.host.org Another.domain.com Bạn phải sử dụng một tài liệu tham khảo cho một số lý do lập trình?
jim_m_somewhere

Câu trả lời:


56

Đối với những người không có tài khoản trên các diễn đàn (hoặc không muốn đăng nhập):

nếu vấn đề chính của bạn không phải là ping mà là ssh, bạn có thể tạo / chỉnh sửa các dòng thêm ~ / .ssh / config như sau:

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3

1
Phần Tên máy chủ cần phải nằm trên một dòng mới. Đây là một hướng dẫn tốt về cách tạo một tệp cấu hình như thế này: mattryall.net/blog/2008/06/ssh-favourite-hosts
Code Commander

1
giải pháp tốt, cảm ơn. Nhưng tất nhiên, giải pháp tốt hơn sẽ là sử dụng tên trên dns
Yura

31

Linux hỗ trợ bí danh bằng cách đặt biến env HOSTALIASES.

echo "fakehost realhost" > /etc/host.aliases
echo "export HOSTALIASES=/etc/host.aliases" >> /etc/profile
. /etc/profile

sau đó bạn có thể

ping fakehost

NB ping yêu cầu bạn thiết lập điều này như root, nhưng bạn có thể làm điều đó như bất kỳ người dùng nào cho bất kỳ ứng dụng nào chạy như người dùng đó. ping suids để root.


3
không hoạt động với tôi trên Ubuntu 12.04 :(
Dimitry K

3
HOSTALIASES chỉ hoạt động đối với các tệp thực thi không có cờ setuid được đặt. Vì vậy, nó sẽ không hoạt động cho ping (trừ khi bạn đã root khi thực hiện ping). Tôi đoán điều này được thực hiện để tránh lừa các tập tin thực thi setuid kết nối với một máy chủ khác so với dự định.
Boris

1
Cũng không hoạt động cho curl
Benubird

7
nó sẽ hiếm khi kết thúc trong kết quả mong đợi. HOSTALIASES chỉ hoạt động cho các ứng dụng sử dụng getaddrinfo (3) hoặc gethostbyname (3) - Điều này có nghĩa là nó sẽ hoạt động đối với các ứng dụng đang cố gắng giải quyết tên máy chủ bằng một cuộc gọi hệ thống cụ thể: Không bao giờ xảy ra. xem unix.stackexchange.com/questions/10438/ vì vậy giải pháp duy nhất là dns địa phương (dnsmasq)
Nadir

1
Có vẻ đây là mánh khóe. Các hàm gethostbyname * (), gethostbyaddr * (), herror () và hstrerror () đã lỗi thời. Nếu hệ thống của bạn chạy DNSMasq cục bộ, bạn có thể đặt bí danh cho bất kỳ độ phân giải nào sử dụng DNS.
teknopaul

24

Bạn có thể thiết lập điều này trên máy chủ DNS của mình, các bản ghi CNAME cho phép một máy được biết đến bởi nhiều hơn một tên máy chủ. Vì vậy, hãy thêm các bản ghi CNAME vào máy chủ DNS của bạn như thế:


fakehost1 IN CNAME realhost 
fakehost2 IN CNAME realhost 
fakehost3 IN CNAME realhost 


3
một máy chủ DNS trọng lượng nhẹ để thử sẽ là dnsmasq(nó cũng phục vụ DHCP).
sybreon

17

Tôi thường làm điều này với các biến môi trường. Tôi biết điều này chỉ hoạt động cho dòng lệnh, nhưng đó là nơi tôi thường xuyên thèm muốn các bí danh tên máy chủ (Tôi đã làm việc với một số tài khoản siêu máy tính, tất cả đều có URL dài). Đây là một ví dụ, nếu bạn đang sử dụng BASH. Trong ~ / .bashrc:

xuất fakehost = "long.ass.annoying.url.org"

sau đó, trong một vỏ mới:

ssh christopher @ $ fakehost


11

Cách duy nhất có thể được thực hiện là nếu bạn có máy chủ dns cục bộ của riêng bạn.


1
Vâng, bây giờ có vẻ như giải pháp duy nhất. Cảm ơn. Không thể upvote vì tôi không có đủ danh tiếng.

Nếu địa chỉ IP luôn thay đổi của kết nối DSL hoặc quay số là vấn đề, dyndns là một giải pháp tốt hơn, IMHO.
Sven

Không, đó không phải là một giải pháp tốt hơn. Khi máy chủ có tên máy chủ được xử lý bởi một thứ khác thì tất cả các nhu cầu của OP là một CNAME cho tên máy chủ đầu tiên. DYNDNS và tương tự dựa vào máy chủ thông báo cho máy chủ dns rằng ip của nó đã thay đổi.
theotherreceive

5

Việc sử dụng /etc/hosts.aliases là một tính năng tiêu chuẩn của các thư viện trình phân giải liên kết. Nó mạnh mẽ hơn việc thêm các mục vào / etc / hosts và có thể được sử dụng nếu bạn không thể thêm CNAMES vào DNS của mình (không có quyền truy cập vào nó).

Nói chung, cách tốt nhất là sử dụng CNAMES trong DNS với TÌM KIẾM thích hợp được xác định trong /etc/resolv.conf.

Cập nhật / etc / hosts không mạnh lắm vì các mục nhập phải được giữ đồng bộ với các thay đổi IP. Điều này chỉ thực sự hoạt động ở quy mô nhỏ hoặc khi bạn đang sử dụng dịch vụ tên để phân phối bản đồ máy chủ (ví dụ: qua ldap).

Một giải pháp khác có thể là DNSMasq http://en.wikipedia.org/wiki/Dnsmasq


Tôi đã thử sử dụng /etc/hosts.aliases trong CENTOS 6 nhưng tính năng này dường như không hoạt động. Tôi cũng không thể tìm thấy bất kỳ tài liệu về việc sử dụng hoặc tồn tại của nó. Tôi nên tìm ở đâu?
mdpc

5

Bạn sẽ cần một máy chủ dyndns sẽ ánh xạ địa chỉ IP hiện tại của bạn đến một tên máy chủ. Bạn sẽ thông báo cho máy chủ này về địa chỉ IP hiện tại của bạn bất cứ khi nào bạn đăng nhập và nó sẽ cập nhật hồ sơ tên máy chủ của bạ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.