Як додати діапазон ip до відомих_хостів?


15

Багато сервісів (як GitHub) використовують широкий спектр IP-адрес і, очевидно, той самий відкритий ключ.

Як я можу додати діапазон IP (бажано в одному) до відомого файлу_hosts?

Для прикладу GitHub він використовує такі діапазони:

  • 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

А головне:

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


1
цей IP - адреса повністю громадськість тут
RSFalcon7

Відповіді:


11

Як зазначається в інших відповідях, known_hosts не підтримує діапазони IP-адрес. Однак він підтримує підстановку. Звичайно, wild-картки - це не одне і те ж, тому вам потрібно бути дуже обережним, як ви їх використовуєте в IP-адресах, але в конкретному випадку Github це можна зробити безпечно.

Здається, ситуація стала простішою з моменту, коли було поставлено запитання. Згідно з офіційною документацією Github, використовується лише один діапазон IP-адрес (принаймні, наскільки йде IPv4). Це діапазон 192.30.252.0/22. Це робить 1020 можливих IP-адрес, які зручно охоплюють весь можливий діапазон для останнього октету всього в чотирьох різних блоках С.

З man 8 sshdцього, з чим ми маємо працювати у відомих_хостях:

Імена хостів - це розділений комою список шаблонів ( *' and? 'Виконують функції підстановок); кожен шаблон, в свою чергу, узгоджується з канонічним іменем хоста (при автентифікації клієнта) або проти наданого користувачем імені (при автентифікації сервера). Шаблону може передувати також !' 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['і ]' brackets then followed by:' і нестандартний номер порту.

Використовуючи цю інформацію, ми можемо побудувати запис, використовуючи * wildcard для останнього октету, який відповідає всім можливим кінцевим точкам Github (та ТІЛЬКИ ці кінцеві точки):

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==

Якщо діапазон IP, необхідний для побудови, не заповнив повний блок С і, таким чином, усі можливі значення для октету, неможливо було б використовувати символи для такої точної відповідності.


8

Я не думаю, що ви можете легко додати діапазони, але я думаю (зараз не можу перевірити це), що такого ж ефекту можна досягти, додавши наступне до .ssh / ssh_config:

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

Далі слід додати ключ до відомого файлу_hosts під іменем github-server-pool.github.com.

Припущення: хост github-server-pool.github.com не існує або ніколи не з'єднаний з ним через SSH.

Ідея, що стоїть за цим, полягає в тому, що ssh використовуватиме ключ github-server-pool.github.com як ключ для пошуку відкритого хост-ключа для всіх хостів домену github.com.


Це чудова відповідь, і простіше, ніж оригінал.
каель

4

У known_hostsфайлі немає підтримки наборів IP-адрес . Вам доведеться мати один рядок на адресу.

Хоча частина записів імені хоста за замовчуванням хеширована, це стосується лише конфіденційності, щоб хтось, хто отримує ваш доступ .known_hosts, не міг легко дізнатися, з якими хостами ви підключились. (Вони все ще можуть перевірити здогадки.) Ви можете використовувати звичайне ім'я хоста або IP-адресу.

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

Зауважте, що це може додавати дублікати.


виправлено, але працює лише для мереж до 0.0.0.0/24
RSFalcon7

@ RSFalcon7 Дійсно. Арифметика IP-адреси дратує. Я зробив швидкий і брудний спосіб вирішення ... Якщо вам потрібна підтримка великих мереж, перед перерахуванням перетворіть IP-адресу на 32-бітове число.
Жил "ТАК - перестань бути злим"

0

SSH, схоже, не мають поняття діапазонів IP для відомих_хостів. Думаю, припущення полягає в тому, що кожен хост мав би унікальний ключ з міркувань безпеки.

Я можу побачити, як попередньо заповнити ваші відомі_хости:

  1. ssh-keyscan- Напишіть короткий скрипт, щоб перебрати всі ці адреси та подати його ssh-keyscanабо файл для ssh-keyscanчитання. ssh-keyscanможе сканувати кілька хостів за викликом, або шляхом вказівки на одному рядку, або із зазначенням списку хостів.

  2. Населяйтеся known_hostsза допомогою сценарію чи редактора. Формат досить простий, якщо ви використовуєте не хешовану версію. Це є:

    ім'я хоста, ключ IP-адреси ssh-key

hostname- це ім'я хоста, з яким ви контактуєте, і буде однаковим для всіх адрес GitHub. IP addressбуло б те, через що скрипт би повторив. keyключ, який ви вказали вище.

Це не елегантно, але я думаю, що люди SSH припускали, що ніхто не буде робити те, що робить GitHub.


Ніхто не повинен робити те, що робить github. Це ключ хоста, а не "група подібних хостів".

@ WumpusQ.Wumbley Я згоден. Але я сумніваюся, GitHub зміниться на моєму так.
куртм

0

Привіт, я знайшов сценарій від Gilles досить корисним, але тільки для роботи в мережах 0.0.0.0/24було обмеженням, я розширив сценарій для роботи з більшими мережами до, 0.0.0.0/16мабуть, він буде корисний для когось іншого.

#!/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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.