Làm thế nào có thể là somename ssh hoạt động, trong khi somename nslookup không?


16

Làm thế nào để biết địa chỉ IP của một số máy chủ somenametôi có thể ssh? Nếu tôi làm nslookuptrên máy chủ này thì nó báo "không trả lời". Làm thế nào có thể sshgiải quyết tên của nó sau đó?


Không giải thích /etc/hostscũng không .ssh/configlàm việc.


BIÊN TẬP

Xin lỗi somenamelà đủ điều kiện.

ssh somename.somedomain

hoạt động, trong khi

ping somename.somedomain

nslookup somename.somedomain

không


12
Nó được liệt kê trong /etc/hostshoặc ~/.ssh/config?
Stephen Kitt

1
Tên cũng có thể được phân giải bằng mDNS (Multicast DNS) hoặc LLMNR (Liên kết phân giải tên đa tuyến cục bộ).
Johan Myréen

Nó có thể có một mục trong tệp .ssh / config của bạn
Tagwint

1
@Dims Bạn có thể thử ping somename.local. .locallà một miền đặc biệt dành riêng cho mDNS. Đối với LLMNR, bạn có thể sử dụng tập lệnh NMAP này .
Johan Myréen

2
@mckenzm không, nó sẽ không.
Stephen Kitt

Câu trả lời:


31

Nslookup là một chương trình truy vấn các máy chủ tên miền Internet . Nslookup rất tốt để truy vấn các máy chủ DNS nhưng nó không cung cấp cho bạn toàn bộ hình ảnh khi nói đến độ phân giải tên.

Trên Linux, độ phân giải tên thường được kiểm soát bởi NSS được cấu hình bởi /etc/nsswitch.conf. Cụ thể, cấu hình này chứa một hostsmục. Ví dụ:

hosts:          files dns

Trong mục trên, bạn có thể thấy rằng điều đầu tiên được truy vấn được filestheo sau dns, có nghĩa là /etc/hostssẽ được truy vấn trước DNS. Các tùy chọn khác tồn tại bao gồm LDAP , Multicast DNSWINS .

Trả lời trực tiếp câu hỏi của bạn, SSH giải quyết tên máy chủ thành địa chỉ IP bằng NSS (lấy kết quả từ nhiều nguồn) trong đó nslookup chỉ truy vấn DNS.

Bạn có thể kiểm tra xem IP NSS nào phân giải tên máy chủ để sử dụng getent. Ví dụ để giải quyết somename:

getent hosts somename

Ngoài ra, trong trường hợp SSH, bạn có thể định cấu hình lưu trữ thông tin cụ thể trong /etc/ssh/ssh_config~/.ssh/config. Điều này thậm chí sẽ cho phép bạn chỉ định một địa chỉ IP cho tên máy chủ, hoàn toàn bỏ qua độ phân giải tên.:

Phần sau đây cho SSH sử dụng 192.168.1.25cho cả hai devdev.example.com. SSH sẽ sử dụng địa chỉ này cho dù các tên này có tồn tại dưới dạng tên DNS cho một IP khác hay không:

# contents of $HOME/.ssh/config
Host dev dev.example.com
    HostName 192.168.1.25

10

Làm thế nào để biết địa chỉ IP của một số máy chủ somenametôi có thể ssh?

Sử dụng cờ verbose ( -v) của sshlệnh:

ssh somename -v

Đầu ra phải chứa, trong số những thứ khác, một dòng hiển thị IP được giải quyết của máy chủ bạn đang kết nối tới:

debug1: Connecting to aur.archlinux.org [5.9.250.164] port 22.

Nếu tôi làm nslookup trên máy chủ này thì nó báo "không trả lời". Làm thế nào có thể sshgiải quyết tên của nó sau đó?

Nguyên nhân có thể xảy ra nhất của sshviệc có thể giải quyết tên máy chủ nslookupkhông thể là do nó được định cấu hình ở sshcấp độ.

Mỗi các ssh_config(5)trang hướng dẫn , có ba nơi sshvẻ tại cho các tập tin cấu hình:

  1. tùy chọn dòng lệnh
  2. tập tin cấu hình của người dùng (~ / .ssh / config)
  3. Tệp cấu hình toàn hệ thống (/ etc / ssh / ssh_config)

Một trong những tệp này có thể chứa tên máy chủ của bạn somename(hoặc mẫu khớp với nó) dưới dạng bí danh của tên máy chủ hoặc IP khác. Ví dụ:

# explicit alias of somename to 8.8.8.8 IP
Host somename
    HostName 8.8.8.8

# pattern alias (that obviously matches somename) to another hostname
# that is itself resolved via DNS (and that can be nslookup-ed).
Host *
    HostName anotherhostname

Vui lòng tham khảo các ssh_config(5)giải thích trang hướng dẫn HostHostNamechỉ thị và đến PATTERNSphần để biết thêm thông tin.


Câu trả lời này không trả lời câu hỏi, đó là cách tên máy chủ được nhận dạng, ngay cả khi máy chủ DNS không phải là máy chủ.
Johan Myréen

1
Câu trả lời chính xác đề cập đến kịch bản rất có thể xảy ra khi ssh user@someserverdường như "giải quyết" someservertên DNS (ngay cả khi điều này không thực sự xảy ra). Nếu Host someserverđược cấu hình trong .ssh/configtệp, thì có thể sử dụng lệnh ssh chính xác như trạng thái OP ngay cả khi someserverkhông có trong DNS.
Fiisch

2
@ JohanMyréen Đầu ra từ ssh -v somenamebao gồm địa chỉ IP (bất kể ssh_configmục nhập nào). Vì vậy, nó trực tiếp trả lời câu hỏi "Làm thế nào để biết địa chỉ IP của một số somename máy chủ mà tôi có thể ssh đến?", Cũng như là bước đầu tiên tốt để trả lời "Làm thế nào mà somename ssh hoạt động được ...?".
JigglyNaga

4

Philip gần như ở đó, nhưng đi xuống đường .ssh/configđua mà không chắc bạn đã cấu hình.

Các lệnh ...

getent hosts somename

... truy vấn NSS bằng cách sử dụng hosts:dòng tra cứu /etc/nsswitch.conf, thay vì chỉ DNS nslookup. Có khả năng môi trường Unix của bạn đang sử dụng nhiều hơn một dịch vụ đặt tên; có thể một số loại tích hợp AD.


3
Tôi sẽ không nói rằng tôi đã đi xuống tuyến đường đó. Tôi đã thêm một "cũng" cho đầy đủ.
Philip Couling

@PhilipCouling Chắc chắn, nhưng "tiền cũng" của bạn chưa hoàn chỉnh - bạn không chỉ ra cách tự ý giải quyết tên khi câu hỏi về "$ thing so với nsloookup".
Giàu

3
Như đã nhận xét về Q, hostthông thường là một phần của liên kết (hoặc tương đương) và giống như cả hai nslookupdigchỉ sử dụng DNS. OTOH getent hosts(hoặc có thể ahosts) làm những gì bạn mô tả.
dave_thndry_085

@ dave_thndry_085 Không chính xác. hosttruy vấn dịch vụ tên khác. Đồng ý rằng đó getent hostslà phương pháp rõ ràng nhất để truy vấn "mọi dịch vụ tên được cấu hình".
Giàu

1
hostlà chỉ DNS trên mỗi trang man và được xác nhận bằng cách thử nghiệm trên các hệ thống tôi sử dụng (CentOS, Ubuntu, FreeBSD, Solaris) cũng như ngược dòng . Cũng xem các bản sao (gần) tôi đã nhận xét về Q cũng nói điều này.
dave_thndry_085
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.