ssh : 자동으로 키 수락


218

이 작은 유틸리티 스크립트를 작성했습니다.

for h in $SERVER_LIST; do ssh $h "uptime"; done

에 새 서버가 추가되면 다음 $SERVER_LIST과 같이 스크립트가 중지됩니다.

The authenticity of host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?

나는 시도했다 yes:

for h in $SERVER_LIST; do yes | ssh $h "uptime"; done

운없이.

ssh새 키를 자동으로 수락 하도록 매개 변수화하는 방법이 있습니까?


6
Lekensteyn의 대답은 훌륭하고 정확하지만, ssh가 "yes"를 기대하고 yes"y"를 출력하기 때문에 운이 좋았을 for h in $SERVER_LIST; do yes yes | ssh $h "uptime"; done것입니다. ").
chazomaticus

답변:


240

예를 들어 StrictHostKeyChecking 옵션을 사용하십시오.

ssh -oStrictHostKeyChecking=no $h uptime

이 옵션은 ~ / .ssh / config에 추가 할 수도 있습니다. 예 :

Host somehost
    Hostname 10.0.0.1
    StrictHostKeyChecking no

호스트 키가 변경되면이 옵션을 사용하더라도 경고 메시지가 표시됩니다.

$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
  remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found

호스트를 자주 다시 설치하지 않는 경우 -oUserKnownHostsFile=/dev/null옵션을 사용하여 보안 수준을 떨어 뜨릴 수 있습니다 (그러나 자주 변경하는 호스트 키에 더 편리함) . 이렇게하면 수신 된 모든 호스트 키가 삭제되므로 경고가 발생하지 않습니다.


18.04에서는 새로운 가능성이 StrictHostKeyChecking=accept-new있습니다. 보낸 사람 man 5 ssh_config:

If this flag is set to accept-new then ssh will automatically
add new host keys to the user known hosts files, but will not
permit connections to hosts with changed host keys.  If this flag
is set to no or off”, ssh will automatically add new host keys
to the user known hosts files and allow connections to hosts with
changed hostkeys to proceed, subject to some restrictions.

10
기본 제공 보안 도구를 우회하므로 최상의 솔루션이 아닙니다. ssh-keyscan시스템에서 사용할 수 있으면 더 좋습니다.
Stefan Lasiewski

2
@StefanLasiewski 신뢰할 수없는 네트워크에 있다면 중간 공격에 사람을 허용합니다. 고정 호스트에 새 키를 허용하려면 ssh-keyscan접근 방식이 더 정교합니다. 동적 / 재사용 IP 주소를 가진 신뢰할 수있는 네트워크의 로컬 가상 시스템 및 기타 호스트의 경우 설명 된 방법으로 충분합니다.
Lekensteyn

8
두 솔루션의 차이점을 명확히하기 위해 : ssh-keyscan솔루션은 한 번만 ssh-keyscan실행되는 중간자 공격에 취약 합니다. 이 -oStrictHostKeyChecking=no솔루션은 매번 ssh실행될 때마다 중간자 공격을 받기 쉽습니다 .
Erik Sjölund

121

다음 명령을 사용하여 서버의 지문을 known_hosts에 추가 할 수 있습니다

ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

참고 : <ip-address> 및 <hostname>을 추가하려는 서버의 IP 및 DNS 이름으로 바꾸십시오.

이것의 유일한 문제는 known_hosts의 일부 서버가 두 번 종료된다는 것입니다. 그것은 실제로 언급하는 것이 아닙니다. 중복이 없는지 확인하려면 다음을 먼저 실행하여 모든 서버를 먼저 제거하십시오.

ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>

그래서 당신은 실행할 수 있습니다 :

for h in $SERVER_LIST; do
    ip=$(dig +search +short $h)
    ssh-keygen -R $h
    ssh-keygen -R $ip
    ssh-keyscan -H $ip >> ~/.ssh/known_hosts
    ssh-keyscan -H $h >> ~/.ssh/known_hosts
done

다시 추가하기 위해 제거 할 때 명심해야 할 사항은 본질적으로 지문 확인의 보안을 제거하는 것입니다. 따라서 유틸리티 스크립트를 실행할 때마다이 스크립트를 실행하고 싶지 않을 것입니다.


1
정렬을 통해 실행 | 다른 키와 동일한 호스트에 문제가 의미 할 수 있기 때문에 UNIQ 한 다음, 변경 호스트를 탐지 스크립트가 가능하고 만 약 사용자에게 경고 할 후 AWK를 사용하여 중복 호스트를 찾고
레나 롤랑

2
-H호스트 이름과 주소 를 해시 하는 메모를 추가 할 수 있습니다 .
David Cullen

25

이 응답에 약간 늦었지만 가동 시간 수집을 실행하기 전에 새 컴퓨터에서 ssh-keyscan을 수행하는 것이 현명한 방법입니다.

ssh-keyscan  <newhost> >> ~/.ssh/known_hosts

편의를 위해 위생 검사를 비활성화하면 환경을 완전히 제어한다고 생각하더라도 나쁜 계획처럼 들립니다.


위의 명령을 실행하고 실제로 대역 외에서 얻은 지문에 대해 호스트 키를 확인하지 않는 것은 다음과 같은 방식으로 취약합니다.StrictHostKeyChecking no
code_monk

3
@code_monk : 아뇨. 실패에 대한 일회성 기회를 엽니 다 (잘못된 호스트의 키를 알려진 호스트에 추가 할 수 있음). StrictHostKeyCheck no 를 선택하면 다른 컴퓨터에 대한 반복 승인이 허용됩니다.
tink

0

서버 목록을 자동으로 추가하려면 다음을 수행하십시오.

파일 서버 목록에 서버 IP 추가

IP는 아래 형식으로 추가해야합니다.

출력 cat servers-list

123.1.2.3
124.1.2.4
123.1.2.5

IP를 교체하여 위의 IP를 변경하십시오.

아래 명령은 목록에서 모든 서버를 추가합니다.

ssh-keyscan -p61 -H "`cat servers-list`" >> ~/.ssh/known_hosts
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.