알려진 SSH 호스트에 호스트 이름이나 IP 대신 해시가 있는 이유는 무엇입니까?

알려진 SSH 호스트에 호스트 이름이나 IP 대신 해시가 있는 이유는 무엇입니까?

동적 IP 뒤에 호스트가 있으므로 .ssh/known_hosts 파일에 해당 주소를 추가하는 스크립트를 사용했지만 최근에 뭔가 변경된 것 같습니다. 내 파일이 해시 몬스터의 공격을 받은 것 같습니다.

|1|Du0QWjqCUrdRK/pnE0PTww2O2Zk=|O31W+SPPLr9+sj1m1K7MfEb+xUQ= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILUT1234567Xu2vvCE1likgUSOXLzEV123456783asaA
|1|K3vgE86MLJTHx8W2sPv1cgP4DI0=|Jattsr5sEW443bnyMKT6W0Noc+k= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILUT1234567Xu2vvCE1likgUSOXLzEV123456783asaA
|1|UlAukzqGavXZvRtMzjvXmHoVeAQ=|0JVjq7YSFulCHmkF46VFwMV/ZBY= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILUT1234567Xu2vvCE1likgUSOXLzEV123456783asaA
  1. 덜 안전한 이전 방법으로 돌아갈 수 있는 방법이 있나요?
  2. 이 해시 형식으로 항목을 쉽게 만들려면 어떻게 해야 합니까? (10.0.0.0/24 범위의 모든 IP가 지정된 지문과 일치해야 함을 ssh에 알리는 스크립트를 작성하고 싶습니다.)

답변1

다음과 같이 HashKnownHosts명령줄( ssh -o HashKnownHosts=no ...) 또는 사용자 프로필에서 SSH 클라이언트 옵션을 "no"로 설정하여 호스트 이름 해싱을 비활성화할 수 있습니다.~/.ssh/config

Host *
  HashKnownHosts no

호스트 이름을 직접 해시하는 방법을 잘 모르겠지만 known_hosts파일에 해시된 항목과 해시가 아닌 항목을 혼합하여 스크립트에서 해시가 아닌 항목을 생성할 수 있습니다.

ssh-keygen -H를 사용하여 파일의 모든 항목을 known_hosts해시 형식으로 변환 할 수 있습니다 .

답변2

이 해시 형식으로 항목을 쉽게 만들려면 어떻게 해야 합니까?

현재 알려진 호스트 파일에 키를 추가하는 방법을 설명하지 않았지만 다음을 사용하고 있다고 가정합니다.ssh-keyscan, 이는 이 사용 사례를 위해 특별히 설계된 도구이기 때문입니다.

ssh-keyscan여러 호스트에 대한 공개 SSH 호스트 키를 수집하는 유틸리티입니다. 구축하고 검증하는 데 도움이 되도록 설계되었습니다.ssh_knownhost형식이 기록된 파일SSHD(8). ssh-keyscan쉘 및 Perl 스크립트에서 사용하기에 적합한 최소한의 인터페이스를 제공합니다.

따라서 현재 스크립트에 다음과 같은 줄이 포함되어 있다고 가정합니다.

# Delete the entry for the old IP
ssh-keygen -R $OLD_IP

# Add entry for the new IP
ssh-keyscan $NEW_IP >> ~/.ssh/known_hosts

당신이해야 할 일은 추가하는 것뿐입니다-H배너해시 형식으로 출력을 생성합니다.

ssh-keyscan -H $NEW_IP >> ~/.ssh/known_hosts

(10.0.0.0/24 범위의 모든 IP가 지정된 지문과 일치해야 함을 ssh에 알리는 스크립트를 작성하고 싶습니다.)

나는 이것이 더 간단한 방법으로 달성될 수 있다고 믿습니다.

SSH에는KnownHostsCommand알려진 호스트 파일과 동일한 형식으로 호스트 키 줄을 출력하는 명령을 지정할 수 있는 구성 매개변수입니다. 이 명령은 SSH가 알려진 호스트 파일을 읽은 후에 호출되며 현재 연결 시도에 대한 정보를 기반으로 추가 항목을 동적으로 추가할 수 있습니다.

따라서 SSH 구성 파일에 다음을 추가할 수 있습니다.

Host 10.0.0.*
  KnownHostsCommand /usr/bin/env printf "%H ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILUT1234567Xu2vvCE1likgUSOXLzEV123456783asaA"

/usr/bin/env[ SSH에 필요한 경로는 KnownHostsCommand절대 경로이고 SSH에 대한 경로는 printf표준화되어 있지 않기 때문에 여기서 이 트릭을 사용합니다 . printf필요한 경우 시스템에서 절대 경로를 사용할 수 있습니다. ]

즉, 다음을 의미합니다.무늬 10.0.0.*를 입력한 후 다음 명령 호출 결과를 호스트 키 목록에 추가합니다. 이 명령은 순서대로 사용됩니다토큰 %H("우리가 찾으려는 호스트 이름"을 의미) 및 질문의 문자열을 사용하여 현재 연결하려는 IP 주소에 대해 유효한 알려진 호스트 키 라인을 구축하십시오.

알려진 호스트 파일을 254개의 동일한 항목으로 가득 채울 필요가 없습니다.

관련 정보