Tại sao SSH không giải quyết tên máy chủ này?


12

Khi tôi cố gắng SSH đến một máy chủ lưu trữ trên mạng có tên storage, tôi gặp lỗi phân giải DNS:

$ ssh storage
ssh: Could not resolve hostname storage: Name or service not known

Nhưng khi tôi truy vấn DNS với máy chủ, nó hoạt động

$ host storage
storage has address 192.168.20.103

Làm thế nào mà nó hostcó thể tìm thấy IP nhưng sshkhông thể?


14
Bắt đầu tập thói quen sử dụng FQDN ở mọi nơi. Nếu đây là vấn đề đầu tiên bạn gặp phải trong những dòng này, thì bạn thật may mắn. Chúng có thể rất lông để theo dõi, và nó sẽ không phải là cuối cùng của bạn. Đây là một gợi ý: storagelà một tên miền cấp cao trực tiếp trên Internet.
Michael Hampton

Bạn có thể 'ssh' đến 192.168.20.103 không?
IvanGoneKrazy

2
Bạn đã xác định tên máy chủ của 192.168.20.103 ở đâu? / etc / host?
Trẻ mồ côi

3
Gõ FQDN là một nỗi đau. Bí danh "lưu trữ" thành "Storage.mydomain.com" trong .ssh / config, mặt khác, thực sự tiện dụng.
pjc50

1
@ pjc50 Tôi gõ storồi nhấn Tab.
Michael Hampton

Câu trả lời:


28

sshhostgiải quyết các tên theo các đường dẫn hoàn toàn khác nhau, do đó, không có gì đáng ngạc nhiên khi đôi khi chúng mang lại kết quả khác nhau, đặc biệt khi tên để giải quyết không phải là FQDN (do đó đề xuất sử dụng FQDN ở mọi nơi.)

Bạn không đề cập bất cứ điều gì về hệ điều hành và cấu hình hệ thống của bạn, vì vậy tôi phải giữ nó chung chung, để mắt đến Linux: Các chi tiết MacOS có phần khác nhau, và Windows thậm chí còn nhiều hơn, nhưng các khái niệm chung là như nhau.

  • hosttruy vấn DNS, vì vậy về cơ bản, nó tìm kiếm /etc/resolv.confvà truy vấn các máy chủ được liệt kê ở đó, có thể đính kèm một tên miền nếu tên máy chủ chưa đủ điều kiện. Nó bỏ qua mọi nguồn có thể khác, nhưng hãy cẩn thận vì ngày nay, nhiều hệ thống chạy máy chủ DNS bộ nhớ đệm cục bộ (thường dnsmasq) đọc /etc/hostsvà các nguồn khác trước khi truy vấn các máy chủ DNS khác, vì vậy nếu hosttruy vấn máy chủ cục bộ đó, kết quả /etc/hostscó thể xuất hiện.

  • sshđi theo con đường riêng của nó. Tôi sẽ mô tả những gì opensshlàm trong Linux, các triển khai khác nhau. Đầu tiên, nó tìm các biệt danh máy chủ được xác định trong các tệp cấu hình (toàn hệ thống /etc/ssh/ssh_configvà mỗi người dùng ~/.ssh/config), sau đó nó tìm kiếm các nguồn khác theo thứ tự được chỉ định hosts:trong lệnh /etc/nsswitch.conf. Nói nó là một cái gì đó như:

    hosts: files dns
    

    điều này có nghĩa là: nhìn vào /etc/hostsvà sau đó truy vấn DNS ( /etc/resolv.confmột lần nữa). Các nguồn có thể khác là lỗi thời nisnetinfodịch vụ, LDAP, thư mục hoạt động, bạn đặt tên cho chúng.

Để gỡ lỗi trường hợp cụ thể của bạn, bạn nên theo con đường thực hiện sshtiếp theo và tìm ra nơi nó bị kẹt.


6
ltrace / strace có thể cho bạn gợi ý về cách ssh thực sự cố gắng giải quyết tên miền ... và công cụ gần nhất với cách thức hoạt động của nó, công cụ dns dòng lệnh có thể được nhận.
rackandboneman

Đề nghị của bạn về việc thay đổi /etc/nsswitch.confđể đọc hosts: files dnslàm việc cho tôi. Cũng như một ghi chú bên lề thú vị, tôi đã thiết lập một số Raspberry Pis với Raspian Jessie trong vài tuần qua và tất cả họ đều yêu cầu thay đổi này.
Patrick Tucci
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.