Как добавить диапазон IP к known_hosts?

С NFS это зависит, какой режим безопасности Вы используете, но в традиционном, список групп, которым принадлежит пользователь, отправляется клиентом на сервер, и существует предел на количество групп, которые могут быть отправлены (это было 16 в прошлый раз, когда я проверил).

Так, клиент говорит: я - uid 1234 и по тому, как я - член групп 12, 13, 14... Если Вы будете больше чем в 16 группах, то тот список будет усеченным и будут группы, для которых сервер не знает, что Вы - член его.

Это - вероятно, объяснение его. Только системный администратор локальной и/или удаленной машины может сделать что-то о тот или путем изменения модели обеспечения безопасности или установки сервера NFS или путем сокращения количества групп, которых Вы являетесь членом.

15
14.10.2013, 16:29
7 ответов

Как отмечалось в других ответах, известные_hosts не имеют поддержки диапазонов IP-адресов. Это, однако, поддерживает подстановочные знаки. Конечно, Wild-Card не совсем такое же, поэтому вам нужно быть очень осторожным о том, как вы используете их в IP-адресах, но в частном случае GitHub это может быть сделано безопасно.

Ситуация, кажется, упрощена проще, поскольку вопрос спросил. Согласно официальной документации Официальная документация GitHub В использовании используется только один диапазон IP-адресов (по крайней мере, насколько IPv4 идет). Это диапазон 192.30.252.0/22. Это делает для 1020 возможных IP-адресов, которые удобно охватывают весь возможный диапазон для последнего октета всего в четырех различных блоках C.

Из Человек 8 SSHD , это то, что мы должны работать в известных_хозты:

имена хостов - это запятая списка шаблонов ( * и ? как подстановочные знаки); Каждый шаблон в свою очередь соответствует каноническому имени хоста (при аутентификации клиента) или против поставляемого пользователем имени (при аутентификации сервера). Узор также может предшествовать ! Чтобы указать отрицание: если имя хоста совпадает с отрицательным рисунком, он не принимается (по этой линии), даже если он соответствует другому шаблону на линии. Имя хоста или адрес может быть приложено в кронштейне ['и ], а затем :' и нестандартный номер порта.

Используя эту информацию, мы можем построить запись, используя подстановочный знак * для последнего октета, который соответствует всеми возможным конечным точкам 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-диапазон, который вам нужен, чтобы построить, не заполнил Полный Clock Block и, следовательно, все возможные значения для октета, было бы невозможно использовать подстановочные знаки для такого точного совпадения.

11
27.01.2020, 19:49

Я не думаю, что можно легко добавить диапазоны, но я думаю (не может протестировать это прямо сейчас), что тот же эффект может быть достигнут путем добавления следующего к .ssh/ssh_config:

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

Затем, Вы добавили бы ключ к known_hosts файлу под именем github-server-pool.github.com.

Предположение: хост github-server-pool.github.com не существует или никогда не подключается с через SSH.

Идея позади него, то, что ssh будет использовать ключевой github-server-pool.github.com в качестве ключа к поиску общедоступный ключ хоста для всех хостов домена github.com.

8
27.01.2020, 19:49
  • 1
    Это - большой ответ, и легче, чем оригинал. –  kael 14.02.2018, 21:15

SSH, кажется, не имеют никакого понятия диапазонов IP для known_hosts. Я думаю, что предположение - то, что каждый хост имел бы уникальный ключ из соображений безопасности.

Два пути I видят, чтобы предварительно заполнить Ваш known_hosts:

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

  2. Заполнить known_hosts самостоятельно со сценарием или редактором. Формат довольно прост при использовании нехешированной версии. Это:

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

hostname имя хоста, с которым Вы связываетесь и были бы тем же для всех адресов GitHub. IP address был бы тем, чего сценарий выполнит итерации через. key ключ, который Вы обеспечили выше.

Ни один не изящен, но я думаю, что люди SSH предположили, что никто не сделает то, что делает GitHub.

0
27.01.2020, 19:49
  • 1
    Никто не должен делать то, что делает GitHub. Это - ключ хоста, не "группа подобных хостов" ключ. –   14.10.2013, 17:57
  • 2
    @WumpusQ.Wumbley я соглашаюсь. Но я сомневаюсь, что GitHub изменится на моем говорить так. спасибо –  kurtm 14.10.2013, 17:58

Нет никакой поддержки наборов IP-адреса known_hosts файл. У Вас должна будет быть одна строка на адрес.

Хотя часть имени хоста записей хешируется по умолчанию, это только для конфиденциальности так, чтобы кто-то овладевающий Вашим .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

Обратите внимание, что это может добавить дубликаты.

4
27.01.2020, 19:49
  • 1
    зафиксировал, но только работающий на сети до 0.0.0.0/24 –  RSFalcon7 14.10.2013, 17:27
  • 2
    @RSFalcon7 Действительно. Арифметика IP-адреса является раздражающей. Я сделал быстрое-и-грязное обходное решение …, Если Вы нуждаетесь в поддержке для больших сетей, преобразовываете IP-адрес в 32-разрядное число прежде, чем сделать перечисление. –  Gilles 'SO- stop being evil' 14.10.2013, 20:44

Привет, я нашел сценарий от Жиля весьма полезным, но работа только для сетей до 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
0
27.01.2020, 19:49

Я написал небольшой Ruby-скрипт github_known_hosts, который может расширять диапазоны IP-адресов, которые GitHub публикует из своей конечной точки метаAPI(https://api.github.com/meta).

#!/usr/bin/env ruby

require "ipaddr"
require "json"

pubkey = "AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ=="
ips    = JSON.parse(STDIN.read)["git"].flat_map { |net| IPAddr.new(net.chomp).to_range.map(&:to_s) }

puts "github.com,gist.github.com,#{ips.join(',')} ssh-rsa #{pubkey}"

Используйте его таким образом, и он создаст очень длинную строку, которую вы можете вставить в свой ~/.ssh/known_hostsфайл:

curl --silent https://api.github.com/meta | github_known_hosts >> ~/.ssh/known_hosts
1
15.05.2020, 22:01

Я спросил в Твиттере о поддержке CIDR для known_hostsи ssh_config, сославшись на этот вопрос и замечание о ServerFault на аналогичный вопрос , в котором упоминается OpenSSH. запрос функции для нотации CIDR(в объявлениях Host, а неknown_hosts).

Разработчик OpenSSH Дэмиен Миллер ответил:

I think we're more likely to turn off CheckHostIP (the thing that spams addresses into known_hosts) in the short term, as nobody has satisfactorily explained what problem it solves to me.

CIDR in ssh_config probably is less likely, as there are too many chicken and egg problems in config parsing vs address resolution.

Maybe we could do it with another parsing pass through the configuration, but that's an ugly solution...

Таким образом, нет правильного решения для этого вопроса, хотя есть решение, которое вы можете реализовать либо глобально (, что, как сказал Дэмиен, может подойти ), либо для каждого -хоста (разумный компромисс ):удалить проверки IP в вашем~/.ssh/config:

Host github.com *.github.com
  CheckHostIp no

Как было отмечено в комментарии на этой странице и как я отметил позже в этой ветке Твиттера, Github здесь не следует лучшим практикам. При развертывании нескольких хостов каждый хост должен иметь уникальный закрытый ключ . В этом случае Github почти наверняка копирует этот ключ на множество хостов. OpenSSH ожидает, что серверы будут иметь уникальные ключи, что является частью дизайна CheckHostIP.

Поскольку Github использует один закрытый ключ на всех этих хостах, его нужно будет заменить на всех этих хостах в тот момент, когда хотя бы один из них будет скомпрометирован. Кто знает, сколько систем по всему миру сломается, когда отпечаток ключа перестанет совпадать.(Сравните это с одним хостом, меняющим свой ключ; cron, которые SSH на Github периодически терпят неудачу, но обычно работают нормально.)

3
14.12.2020, 02:55

Теги

Похожие вопросы