
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+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eF zLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3 lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
답변1
다른 답변에서 언급했듯이,알려진_호스트IP 주소 범위를 지원하지 않습니다. 그러나 와일드카드는 지원합니다. 물론 와일드카드는 완전히 똑같은 것이 아니므로 IP 주소에서 와일드카드를 사용하는 방법에 대해 매우 주의해야 합니다. 하지만 GitHub의 특별한 경우에는 이 작업을 안전하게 수행할 수 있습니다.
질문을 받은 이후로 상황은 좀 더 단순해진 것 같습니다. 에 따르면GitHub의 공식 문서사용 중인 IP 주소 범위는 단 하나뿐입니다(적어도 IPv4가 적용되는 한). 이는 192.30.252.0/22 범위입니다. 따라서 단 4개의 서로 다른 C 블록의 마지막 옥텟에 대해 가능한 전체 범위를 편리하게 포괄하는 1020개의 가능한 IP 주소가 만들어집니다.
에서 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_hosts
저는 GitHub가 게시한 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