Bilinen_hostlara bir IP aralığı nasıl eklenir?


15

Birçok hizmet (GitHub gibi) çok çeşitli IP'ler ve aynı ortak anahtar kullanır.

Bilinen_hosts dosyasına bir IP aralığını (tercihen tek olarak) nasıl ekleyebilirim?

GitHub örneği için aşağıdaki aralıkları kullanır:

  • 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

Ve anahtar:

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


1
Bu IP'ler tamamen halka açıktır burada
RSFalcon7

Yanıtlar:


11

Diğer yanıtlarda belirtildiği gibi, bilinen_hostlar IP adresi aralıkları için destek sağlamaz. Ancak joker karakterleri destekler. Tabii ki joker karakterler aynı şey değildir, bu yüzden bunları IP adreslerinde nasıl kullandığınız konusunda gerçekten dikkatli olmanız gerekir, ancak Github'ın özel durumunda bu güvenli bir şekilde yapılabilir.

Soru sorulduğundan beri durum daha da basitleşti. Github'un resmi belgelerine göre, kullanımda sadece bir IP adresi aralığı vardır (en azından IPv4'e kadar). Bu 192.30.252.0/22 ​​aralığıdır. Bu, sadece dört farklı C bloğunda son sekizlinin olası tüm aralığını kapsayan 1020 olası IP adresini mümkün kılar.

Kimden man 8 sshd, bilinen_hosts ile çalışmak zorunda olduğumuz şey budur:

Ana makine adları, virgülle ayrılmış bir desen listesidir ( *' and? 'Joker karakter görevi görür); sırayla her bir desen standart ana bilgisayar adıyla (bir istemcinin kimliğini doğrularken) veya kullanıcı tarafından sağlanan adla (bir sunucunun kimliğini doğrularken) eşleştirilir. Bir desenden önce !' 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['ve ]' brackets then followed by:' ve standart olmayan bir port numarası da gelebilir .

Bu bilgiyi kullanarak, son sekizlinin * joker karakterini kullanarak tüm olası Github uç noktalarıyla (ve SADECE bu uç noktalarla) eşleşen bir giriş oluşturabiliriz:

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şa etmeniz gereken IP aralığı tam bir C bloğunu ve böylece bir oktet için tüm olası değerleri doldurmadıysa, böyle doğru bir eşleşme için joker karakterler kullanmak imkansız olurdu.


8

Ben aralıkları kolayca ekleyebilirsiniz sanmıyorum, ama (şu anda test edemez) aynı etki aşağıdaki .ssh / ssh_config ekleyerek elde edilebileceğini düşünüyorum:

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

Daha sonra, anahtarı bilinen_hosts dosyasına github-server-pool.github.com adıyla eklersiniz.

Varsayım: ana bilgisayar github-server-pool.github.com mevcut değil veya hiçbir zaman SSH aracılığıyla bağlı değil.

Bunun arkasındaki fikir, ssh'nin github-server-pool.github.com anahtarını, github.com etki alanının tüm ana bilgisayarları için genel ana bilgisayar anahtarını aramak için anahtar olarak kullanmasıdır.


Bu harika bir cevap ve orijinalinden daha kolay.
kael

4

known_hostsDosyada IP adresi kümeleri için destek yoktur . Her adres için bir satırınızın olması gerekir.

Girişlerin ana bilgisayar adı kısmı varsayılan olarak karma olsa da, bu yalnızca gizlilik içindir, böylece .known_hostssizi ele geçiren biri hangi ana bilgisayarlara bağlandığınızı kolayca bulamaz. (Yine de tahminleri doğrulayabilirler.) Düz bir ana bilgisayar adı veya IP adresi kullanabilirsiniz.

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

Bunun kopyalar ekleyebileceğini unutmayın.


düzeltildi, ancak yalnızca 0.0.0.0/24'e kadar ağlar için çalışıyor
RSFalcon7

@ RSFalcon7 Gerçekten. IP adresi aritmetiği sinir bozucu. Çabuk ve kirli bir geçici çözüm yaptım… Daha büyük ağlar için desteğe ihtiyacınız varsa, numaralandırmayı yapmadan önce IP adresini 32 bit numaraya dönüştürün.
Gilles 'SO- kötü olmayı kes'

0

SSH'nin bilinen_hosts için IP aralığı kavramı yok gibi görünüyor. Her ev sahibinin güvenlik nedeniyle benzersiz bir anahtarı olacağı varsayımına inanıyorum.

Bilinen_host'larınızı önceden doldurmanın iki yolu var:

  1. ssh-keyscan- Tüm bu adresleri yinelemek için kısa bir komut dosyası yazın ve ya onu beslemek için ssh-keyscanya da ssh-keyscanokumak için bir dosya . ssh-keyscanbir satırda veya ana bilgisayarların bir listesini belirterek her çağrıda birden çok ana bilgisayarı tarayabilir.

  2. Doldur known_hostsbir komut dosyası veya editör kendinizi. Karma olmayan sürümü kullanırsanız biçim oldukça basittir. Bu:

    ana bilgisayar adı, IP adresi ssh-keytype anahtarı

hostnameiletişim kurduğunuz ana bilgisayar adıdır ve tüm GitHub adresleri için aynıdır. IP addressbir komut dosyasının yinelediği şey olurdu. keyyukarıda verdiğiniz anahtardır.

İkisi de zarif değil ama sanırım SSH halkı hiç kimsenin GitHub'ın yaptıklarını yapmayacağını sanıyordu.


Kimse github'un yaptığı şeyi yapmamalı. Bu bir "benzer ana bilgisayar grubu" anahtarı değil, bir ana bilgisayar anahtarıdır.

@ WumpusQ.Wumbley katılıyorum. Ama GitHub'ın sözlerimde değişeceğinden şüpheliyim.
kurtm

0

Merhaba ben Gilles gelen komut dosyası oldukça yararlı buldum, ama sadece kadar ağlar için çalışmak 0.0.0.0/24bir sınırlama oldu, ben 0.0.0.0/16belki de başkası için yararlı olacak kadar büyük ağlarla çalışmak için komut uzattım.

#!/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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.