Known_hosts에 IP 범위를 추가하는 방법은 무엇입니까?

Known_hosts에 IP 범위를 추가하는 방법은 무엇입니까?

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+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIckr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlJizHhbn2mUjvSAHQqZETYP 81eF zLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3 GHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==

답변1

다른 답변에서 지적했듯이,알려진 호스트IP 주소 범위는 지원되지 않습니다. 그러나 와일드카드는 지원합니다. 물론 와일드카드는 완전히 똑같지는 않기 때문에 IP 주소에 사용할 때는 매우 주의해야 하지만 GitHub의 특별한 경우에는 안전하게 사용할 수 있습니다.

이 질문을 받은 이후로 상황이 더 쉬워진 것 같습니다. ~에 따르면GitHub의 공식 문서하나의 IP 주소 범위만 사용하십시오(적어도 IPv4에 관한 한). 192.30.252.0/22 ​​범위입니다. 이를 통해 1020개의 가능한 IP 주소가 4개의 서로 다른 C 블록에 있는 마지막 옥텟의 전체 가능한 범위에 편리하게 포함될 수 있습니다.

에서 man 8 sshd, 이것이 우리가 처리해야 할 것입니다알려진 호스트:

Hostnames쉼표로 구분된 패턴 목록(와일드카드 역할)입니다 *. ?각 패턴은 차례로 표준 호스트 이름(클라이언트 인증 시) 또는 사용자 제공 이름(서버 인증 시)과 일치됩니다. 부정을 나타내기 위해 패턴 앞에 를 붙일 수도 있습니다 !. 호스트 이름이 부정 패턴과 일치하면 해당 줄의 다른 패턴과 일치하더라도 (해당 줄에서) 허용되지 않습니다. 호스트 이름이나 주소는 선택적으로 대괄호로 묶을 수 있으며 그 [뒤에 비표준 포트 번호가 올 수 있습니다.]:

이 정보를 사용하여 *가능한 모든 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 블록이 채워져 있지 않은 경우(따라서 가능한 모든 옥텟 값) 와일드카드를 사용하여 정확한 일치를 얻을 수 없습니다.

답변2

범위를 쉽게 추가할 수는 없을 것 같지만(지금은 테스트할 수 없음) .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.com 도메인의 모든 호스트에 대한 공개 호스트 키를 찾기 위한 키로 github-server-pool.github.com 키를 사용한다는 것입니다.

답변3

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

github_known_hostsGitHub에서 게시한 IP 주소 범위를 확장하는 작은 Ruby 스크립트를 작성했습니다.메타 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

관련 정보