known_hosts에 IP 범위를 추가하는 방법은 무엇입니까? 다음 범위를 사용합니다. 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 그리고 열쇠는 :

GitHub와 같은 많은 서비스는 광범위한 IP를 사용하며 분명히 동일한 공개 키를 사용합니다.

known_hosts 파일에 IP 범위 (바람직하게는 단일)를 어떻게 추가 할 수 있습니까?

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



답변

다른 답변에서 언급했듯이 known_hosts는 IP 주소 범위를 지원하지 않습니다. 그러나 와일드 카드는 지원합니다. 물론 와일드 카드는 똑같지 않으므로 IP 주소에서 사용하는 방법에 대해 신중해야하지만 Github의 경우에는 안전하게 수행 할 수 있습니다.

질문이 제기 된 이후 상황이 더 단순 해 보였습니다. Github의 공식 문서 에 따르면 사용중인 IP 주소 범위는 하나뿐입니다 (최소한 IPv4의 경우). 이것은 192.30.252.0/22 ​​범위입니다. 이는 단지 4 개의 다른 C 블록에서 마지막 옥텟에 대한 전체 범위를 편리하게 확장 할 수있는 1020 개의 가능한 IP 주소를 만듭니다.

에서 man 8 sshd, 이것은 known_hosts에서 작업해야하는 것입니다.

호스트 이름은 쉼표로 구분 된 패턴 목록입니다 ( *' 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:’및 비표준 포트 번호가 올 수도 있습니다.

이 정보를 사용하여 가능한 모든 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 범위가 전체 C 블록을 채우지 않아 옥텟에 대한 모든 가능한 값을 채우지 않으면 정확한 일치를 위해 와일드 카드를 사용할 수 없습니다.


답변

나는 쉽게 범위를 추가 할 수는 없다고 생각하지만 .ssh / ssh_config에 다음을 추가하여 동일한 효과를 얻을 수 있다고 생각합니다 (지금 이것을 테스트 할 수는 없습니다).

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

그런 다음 github-server-pool.github.com이라는 이름으로 known_hosts 파일에 키를 추가합니다.

가정 : 호스트 github-server-pool.github.com이 없거나 SSH를 통해 연결되지 않았습니다.

그 뒤에 아이디어는 ssh가 github.server-pool.github.com 키를 github.com 도메인의 모든 호스트에 대한 공개 호스트 키를 찾는 키로 사용한다는 것입니다.


답변

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

중복이 추가 될 수 있습니다.


답변

SSH는 known_hosts에 대한 IP 범위 개념이없는 것 같습니다. 보안상의 이유로 각 호스트에는 고유 한 키가 있다고 가정합니다.

known_hosts를 미리 채우는 두 가지 방법 :

  1. ssh-keyscan-간단한 스크립트를 작성하여 모든 주소를 반복 하여 읽거나 읽을 수 ssh-keyscan있도록 파일 ssh-keyscan로 보냅니다. ssh-keyscan한 줄에 지정하거나 호스트 목록을 지정하여 호출 당 여러 호스트를 스캔 할 수 있습니다.

  2. known_hosts스크립트 나 편집기로 자신을 채우 십시오. 해시되지 않은 버전을 사용하면 형식이 매우 간단합니다. 그것은:

    호스트 이름, IP 주소 ssh-keytype 키

hostname연락하는 호스트 이름이며 모든 GitHub 주소에서 동일합니다.
IP address스크립트가 반복되는 것입니다.
key위에 제공 한 키입니다.

우아하지는 않지만 SSH 사람들은 GitHub 이하는 일을 아무도하지 않을 것이라고 생각합니다.


답변

안녕하세요, 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


답변