Làm cách nào để thêm một phạm vi ip vào know_hosts?


15

Nhiều dịch vụ (như GitHub) sử dụng nhiều loại IP và rõ ràng là cùng một khóa chung.

Làm cách nào tôi có thể thêm một phạm vi IP (tốt nhất là trong một) vào tệp know_hosts?

Đối với ví dụ GitHub, nó sử dụng các phạm vi sau:

  • 207.97.227.224/27
  • 173.203.140.192/27
  • 204.232.175.64/27
  • 72.4.117.96/27
  • 192.30.252.0/22

Và chìa khóa là:

AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa + PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31 / yMf + Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB + weqqUUmpaaasXVal72J + UX2B + 2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi / w4yCE6gbODqnTWlg7 + wC604ydGXA8VJiS5ap43JXiUFFAaQ ==


1
những IP đó hoàn toàn công khai tại đây
RSFalcon7

Câu trả lời:


11

Như đã lưu ý trong các câu trả lời khác, know_hosts không hỗ trợ cho dải địa chỉ IP. Nó, tuy nhiên, hỗ trợ ký tự đại diện. Tất nhiên thẻ đại diện không hoàn toàn giống nhau, vì vậy bạn cần thực sự cẩn thận về cách bạn sử dụng chúng trong địa chỉ IP, nhưng trong trường hợp cụ thể của Github, điều này có thể được thực hiện một cách an toàn.

Tình hình dường như đã trở nên đơn giản hơn kể từ khi câu hỏi được hỏi. Theo tài liệu chính thức của Github, chỉ có một dải địa chỉ IP được sử dụng (ít nhất là theo như IPv4). Đây là phạm vi 192.30.252.0/22. Điều đó làm cho 1020 địa chỉ IP có thể mở rộng một cách thuận tiện toàn bộ phạm vi có thể cho octet cuối cùng chỉ trong bốn khối C khác nhau.

Từ man 8 sshdđây, đây là những gì chúng ta phải làm việc với know_hosts:

Tên máy chủ là danh sách các mẫu được phân tách bằng dấu phẩy ( *' and? 'Đóng vai trò là ký tự đại diện); lần lượt từng mẫu được khớp với tên máy chủ chính tắc (khi xác thực ứng dụng khách) hoặc với tên do người dùng cung cấp (khi xác thực máy chủ). Một mẫu cũng có thể được bắt đầu bằng !' to indicate negation: if the host name matches a negated pattern, it is not accepted (by that line) even if it matched another pattern on the line. A hostname or address may optionally be enclosed within['và ]' brackets then followed by:' và số cổng không chuẩn.

Sử dụng thông tin này, chúng tôi có thể tạo một mục nhập bằng cách sử dụng * ký tự đại diện cho octet cuối cùng khớp với tất cả các điểm cuối Github có thể (và CHỈ các điểm cuối đó) như sau:

github.com,192.30.252.*,192.30.253.*,192.30.254.*,192.30.255.* ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==

Nếu phạm vi IP bạn cần để xây dựng không lấp đầy một khối C đầy đủ và do đó, tất cả các giá trị có thể có cho một octet, không thể sử dụng các ký tự đại diện cho một kết hợp chính xác như vậy.


8

Tôi không nghĩ bạn có thể dễ dàng thêm các phạm vi, nhưng tôi nghĩ (không thể kiểm tra điều này ngay bây giờ) rằng có thể đạt được hiệu quả tương tự bằng cách thêm các mục sau vào .ssh / ssh_config:

Host *.github.com
HostKeyAlias github-server-pool.github.com

Tiếp theo, bạn sẽ thêm khóa vào tệp know_hosts dưới tên github-server-pool.github.com.

Giả định: máy chủ github-server-pool.github.com không tồn tại hoặc không bao giờ được kết nối thông qua SSH.

Ý tưởng đằng sau nó là ssh sẽ sử dụng khóa github-server-pool.github.com làm chìa khóa để tra cứu khóa máy chủ công cộng cho tất cả các máy chủ của miền github.com.


Đây là một câu trả lời tuyệt vời, và dễ dàng hơn so với bản gốc.
kael

4

Không có hỗ trợ cho các bộ địa chỉ IP trong known_hoststệp. Bạn sẽ phải có một dòng trên mỗi địa chỉ.

Mặc dù phần tên máy chủ của mục nhập được băm theo mặc định, nhưng điều này chỉ dành cho quyền riêng tư để ai đó nắm giữ bạn .known_hostssẽ không thể dễ dàng tìm ra máy chủ nào bạn đang kết nối. (Họ vẫn có thể xác minh dự đoán.) Bạn có thể sử dụng tên máy chủ hoặc địa chỉ IP đơn giản.

for net in 207.97.227.224/27 173.203.140.192/27 204.232.175.64/27 72.4.117.96/27 192.30.252.0/24 192.30.252.1/24 192.30.252.2/24 192.30.252.3/24; do
  base=${net%/*}; d=${base##*.}; abc=${base%.*}
  bits=$((32 - ${net#*/}))
  e=0
  while [ $e -lt $((2 ** bits) ]; do
    echo "$abc.$((d + e)) ssh-rsa AAAAB3NzaC1yc…" >>~/.ssh/known_hosts
    e=$((e + 1))
  done
done

Lưu ý rằng điều này có thể thêm trùng lặp.


đã sửa, nhưng chỉ hoạt động đối với các mạng tối đa
0,0.0.0 / 24

@ RSFalcon7 Thật vậy. Số học địa chỉ IP là gây phiền nhiễu. Tôi đã thực hiện một cách giải quyết nhanh chóng và bẩn thỉu Nếu bạn cần hỗ trợ cho các mạng lớn hơn, hãy chuyển đổi địa chỉ IP thành số 32 bit trước khi thực hiện phép liệt kê.
Gilles 'SO- ngừng trở nên xấu xa'

0

SSH dường như không có khái niệm về phạm vi IP cho know_hosts. Tôi nghĩ rằng giả định là mỗi máy chủ sẽ có một khóa duy nhất vì lý do bảo mật.

Hai cách tôi có thể thấy để điền trước thông tin đã biết của bạn:

  1. ssh-keyscan- Viết một đoạn script ngắn để lặp qua tất cả các địa chỉ đó và đưa nó đến ssh-keyscanhoặc một tệp ssh-keyscanđể đọc. ssh-keyscancó thể quét nhiều máy chủ cho mỗi lần gọi, thông qua chỉ định trên một dòng hoặc chỉ định danh sách các máy chủ.

  2. Dân trí known_hostsvới một kịch bản hoặc biên tập viên. Định dạng khá đơn giản nếu bạn sử dụng phiên bản không băm. Nó là:

    tên máy chủ, địa chỉ IP ssh-keytype

hostnamelà tên máy chủ bạn liên hệ và sẽ giống nhau cho tất cả các địa chỉ GitHub. IP addresssẽ là những gì một kịch bản sẽ lặp đi lặp lại. keylà chìa khóa bạn cung cấp ở trên.

Không phải là thanh lịch, nhưng tôi nghĩ rằng những người SSH cho rằng không ai sẽ làm những gì GitHub đang làm.


Không ai nên làm những gì github đang làm. Đó là khóa máy chủ, không phải là khóa "nhóm máy chủ tương tự".

@ WumpusQ.Wumbley tôi đồng ý. Nhưng tôi nghi ngờ GitHub sẽ thay đổi khi tôi nói như vậy.
kurtm

0

Xin chào Tôi thấy tập lệnh từ Gilles khá hữu ích, nhưng chỉ hoạt động cho các mạng 0.0.0.0/24là hạn chế, tôi đã mở rộng tập lệnh để hoạt động với các mạng lớn hơn 0.0.0.0/16có lẽ nó sẽ hữu ích cho người khác.

#!/bin/sh
# http://unix.stackexchange.com/questions/94448/how-to-add-an-ip-range-to-known-hosts
# answered Oct 11 '13 at 0:21  Gilles
# only working for networks up to 0.0.0.0/24
# Declan Forde - Increased the range up to 0.0.0.0/16 networks


NETWORKS="127.0.0.0/30 127.0.0.0/29 127.0.0.0/28 127.0.0.0/27 127.0.0.0/26 127.0.0.0/25 127.0.0.0/24 127.0.0.0/23 127.0.0.0/22 127.0.0.0/21 127.0.0.0/16"

for net in ${NETWORKS}
do
  base=${net%/*}
  bits=$((32 - ${net#*/}))

  abc=${base%.*}
  ab=${abc%.*}
  c=${abc##*.}
  d=${base##*.}

  if [ $bits -gt 8 ] && [ $bits -le 16 ]
  then
    netbits=$((bits - 8))
    bits=8
  else
    netbits=0
  fi

  netcount=0
  while [ $netcount -lt $((2 ** netbits)) ]
  do
    count=0
    while [ $count -lt $((2 ** bits)) ]
    do
      echo "$ab.$c.$((d + count))"
      echo "$ab.$c.$((d + count)) ssh-rsa AAAAB3NzaC1yc." >>~/.ssh/known_hosts
    count=$((count + 1))
    done
    netcount=$((netcount + 1))
    c=$((c + 1))
  done
done
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.