ssh : 호스트 'hostname'의 신뢰성을 설정할 수 없습니다


153

컴퓨터에 ssh 할 때 언젠가이 오류 경고가 표시되고 "yes"또는 "no"라는 메시지가 표시됩니다. 다른 컴퓨터로 자동 ssh하는 스크립트에서 실행할 때 약간의 문제가 발생합니다.

경고 메시지 :

The authenticity of host '<host>' can't be established.
ECDSA key fingerprint is    SHA256:TER0dEslggzS/BROmiE/s70WqcYy6bk52fs+MLTIptM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'pc' (ECDSA) to the list of known hosts.

자동으로 "예"라고 말하거나 무시하는 방법이 있습니까?


27
나는 이것에 대해 조언 할 것입니다. 이러한 오류가 발생하는 이유를 알아 내야합니다. 그렇지 않으면 중간 공격을받는 사람에게 자신을 열게됩니다. 이러한 오류가 사용자를 보호하려고하는 것입니다.
Peter Bagnall

3
이것은 ssh 키를 사용하는 서버의 변경으로 인해 발생하거나 사용자와 서버 사이에 앉아있는 사람이 보내거나받는 모든 것을 듣고 있기 때문일 수 있습니다.
derekdreery

이 오류의 원인은 무엇입니까?
AiU

베드로의 의견에 동의하지 않습니다. 대규모 조직에서 다른 사람이 작업을 마치려고 할 때와 같은 문제를 해결하도록하는 것은 비현실적입니다.
Sridhar Sarnobat가

많은 대규모 조직은 @SridharSarnobat가 제안하는 것과 정확히 반대입니다. 당신 확실히 올바른 사람들은 문제의 그 종류를 해결하기 위해, 그들 해결하려면 시도하는 것은 단지 상황을 악화 있습니다.
제임스 무어

답변:


135

ssh 클라이언트에 따라 명령 행에서 StrictHostKeyChecking 옵션을 no로 설정하거나 키를 null known_hosts 파일로 보낼 수 있습니다. 구성 파일에서 모든 호스트 또는 지정된 IP 주소 또는 호스트 이름 세트에 대해 이러한 옵션을 설정할 수도 있습니다.

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

편집하다

@IanDunn이 지적한 것처럼이 작업을 수행하면 보안 위험이 있습니다. 연결하려는 리소스가 공격자에 의해 스푸핑 된 경우 대상 서버의 챌린지를 잠재적으로 다시 재생하여 원격 리소스에 실제로 연결되어있는 동안 원격 리소스에 연결한다고 생각하도록 속일 수 있습니다. 당신의 자격 증명. HostKeyChecking을 건너 뛰도록 연결 메커니즘을 변경하기 전에 해당 위험이 적절한 지 신중하게 고려해야합니다.

참조 .


40
보안 영향에 대해 경고하지 않고 이것을 권장하는 것은 무책임하다고 생각합니다. superuser.com/a/421084/121091 이 더 나은 답변입니다.
Ian Dunn

5
@IanDunn 나는 일반적인 SSH 클라이언트 상황에서 당신에게 동의 할 것이지만 OP가 스크립트를 실행하는 동안이 문제가 발생했다고 분명히 말하면 대안은 호스트 키가 변경 될 때마다 스크립트를 중단하는 것입니다 (그리고 여러 가지 이유가 있습니다) 당신이 언급 한 답변이 해결되지 않은 경우 일 수 있습니다. 즉, 유효한 비평이므로 위험을 지적하기 위해 답변을 업데이트했습니다.
cori September

6
나는 많은 사람들이이 답변을 찬성했고 또한 질문자가 그것을 받아 들인다 고 믿을 수 없다. 이 방법은 보안 검사를 무시하고 원격 호스트에 연결합니다. ~ / .ssh / 폴더의 known_hosts 파일에 쓰기 권한이 있는지 확인하십시오. 그렇지 않은 경우이 답변을 사용하십시오. stackoverflow.com/a/35045005/2809294
ARK

무엇을하고 있는지 아는 한 이것이 최선의 해결책입니다. 우리는 자동으로 연결되는 내부 웹 사이트를 가지고 있으며 많은 IP 주소를 업데이트합니다. ~ / .ssh / config에 이것을 추가하고 작동합니다. 내가 당신을 마음 알고 이 사이트는 내가 생각하는 어떤 것을하고 그렇지 않은 경우 나 데이터가 전송되는 것을 알고 있기 때문에, 나쁜 사람은 어떤 장점이 없습니다.
user1683793

75

더 나은 답변이 필요한 오래된 질문.

비활성화하지 않고 대화식 프롬프트를 방지 할 수 있습니다 StrictHostKeyChecking(안전하지 않음).

다음 로직을 스크립트에 통합하십시오.

if [ -z "$(ssh-keygen -F $IP)" ]; then
  ssh-keyscan -H $IP >> ~/.ssh/known_hosts
fi

서버의 공개 키가에 있는지 확인합니다 known_hosts. 그렇지 않은 경우 서버에서 공개 키를 요청하여에 추가합니다 known_hosts.

이러한 방식으로 중간자 공격에 한 번만 노출되며 다음과 같이 완화 될 수 있습니다.

  • 스크립트가 보안 채널을 통해 처음 연결되도록 보장
  • 로그 또는 known_hosts를 검사하여 지문을 수동으로 확인 (한 번만 수행)

4
또는 인프라 구성 설정의 일부로 모든 시스템의 known_hosts 파일을 관리하십시오.
Thilo

1
ssh-keyscan은 ProxyCommand에서 작동하지 않습니다. marc.info/?l=openssh-unix-dev&m=108446567718763&w=2
Richlv

1
예상대로 작동하지 않습니다. `ssh-keygen -F $IP`는 "`ssh-keygen -F $IP`"따옴표로 묶어야하며, 다른 경우에는 문자열로 해석되지 않아야합니다.
avtomaton

또는 ssh-kegen 반환 값을 사용하는 oneliner로 :ssh-keygen -F $IP >/dev/null || ssh-keyscan -H $IP >> ~/.ssh/known_hosts
Gohu

38

비활성화하거나 제어 비활성화하려면 다음 줄을 시작 부분에 추가하십시오 /etc/ssh/ssh_config.

Host 192.168.0.*
   StrictHostKeyChecking=no
   UserKnownHostsFile=/dev/null

옵션 :

  • 호스트 서브넷은 *모든 IP에 대한 무제한 액세스를 허용 할 수 있습니다 .
  • /etc/ssh/ssh_config글로벌 구성 또는 ~/.ssh/config사용자 별 구성을 위해 편집하십시오 .

http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html을 참조 하십시오

superuser.com과 비슷한 질문-https://superuser.com/a/628801/55163 참조


19

~/.ssh/known_hosts쓰기 가능한지 확인하십시오 . 그것은 나를 위해 그것을 고쳤다.


4
모든 사람이 known_hosts에 쓸 수 있도록 안전합니까?
akaRem

2
@akaRem은 확실히 아닙니다. 일반적으로 해당 .ssh폴더 를 소유 한 사용자 만 쓸 수 있기를 원합니다 .
2rs2ts

권한 0400이 최적입니다 (누구든지 정정하십시오). 제 문제는 단순히 .ssh내 사용자 의 폴더가 자신의 0400 권한을 무효화하여 소유권이 변경 되었다는 것 입니다. sudo소유권을 다시 변경하면 문제가 해결되었습니다.
Charney Kaye 1

이것은 나를 위해 문제를 해결했습니다.
Sivaji

14

이를 해결하는 가장 좋은 방법은 'StrictHostKeyChecking'외에도 'BatchMode'를 사용하는 것입니다. 이런 식으로 스크립트는 새 호스트 이름을 받아 known_hosts 파일에 쓰지만 예 / 아니요 개입이 필요하지 않습니다.

ssh -o BatchMode=yes -o StrictHostKeyChecking=no user@server.example.com "uptime"

10

일반적으로 '~ / .ssh / config'에있는 구성 파일을 편집하고 파일을 시작하면 아래 줄을 추가하십시오.

Host *
    User                   your_login_user
    StrictHostKeyChecking  no
    IdentityFile          ~/my_path/id_rsa.pub

사용자 설정 your_login_user이이 설정이 your_login_user
StrictHostKeyCheck에 속해 있음을 no 로 설정하면
IdentityFile이 RSA 키 경로 라는 메시지가 표시되지 않습니다.

이것은 나와 내 스크립트에 도움이됩니다. 행운을 빕니다.


정말 하루를 구 해주셔서 감사합니다. 그러나 마지막 줄 IdentityFile은 무엇입니까? 그것 없이도 작동하는 것 같습니다 ..
supersan

7

이 경고는 보안 기능으로 인해 발생하므로이 기능을 비활성화하지 마십시오.

한 번만 표시됩니다.

두 번째 연결 후에도 여전히 나타나면 known_hosts파일 에 문제가있을 수 있습니다. 이 경우 다음과 같은 메시지가 나타납니다.

Failed to add the host to the list of known hosts 

파일의 사용 권한을 사용자가 쓸 수 있도록 변경하는 소유자를 변경하여 문제를 해결할 수 있습니다.

sudo chown -v $USER ~/.ssh/known_hosts

5

Cori의 답변을 참조하여 수정하고 아래 명령을 사용했습니다. 없이는 exit나머지 명령이 실제로 원격 컴퓨터에 로깅되어 스크립트에서 원하지 않았습니다.

ssh -o StrictHostKeyChecking=no user@ip_of_remote_machine "exit"

5

이렇게하십시오-> chmod +w ~/.ssh/known_hosts. 에 파일에 대한 쓰기 권한이 추가됩니다 ~/.ssh/known_hosts. 그 후 known_hosts다음에 연결할 때 원격 호스트가 파일에 추가됩니다 .


4

이상적으로는 자체 관리 인증 기관을 작성해야합니다. 키 페어 생성으로 시작하십시오. ssh-keygen -f cert_signer

그런 다음 각 서버의 공개 호스트 키에 서명하십시오. ssh-keygen -s cert_signer -I cert_signer -h -n www.example.com -V +52w /etc/ssh/ssh_host_rsa_key.pub

서명 된 공개 호스트 키가 생성됩니다. /etc/ssh/ssh_host_rsa_key-cert.pub

에서 /etc/ssh/sshd_config의 지점 HostCertificate이 파일을 사용하고 있습니다 : HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub

sshd 서비스를 다시 시작하십시오. service sshd restart

그런 다음 SSH 클라이언트에서 다음을 추가하십시오 ~/.ssh/known_hosts. @cert-authority *.example.com ssh-rsa AAAAB3Nz...cYwy+1Y2u/

위의 내용은 다음과 같습니다.

  • @cert-authority
  • 도메인 *.example.com
  • 공개 키의 전체 내용 cert_signer.pub

그만큼 cert_signer공개 키는 누구의 공개 호스트 키에 의해 서명 된 모든 서버 신뢰 cert_signer개인 키를.

클라이언트 측에서 일회성 구성이 필요하지만 아직 프로비저닝되지 않은 서버를 포함하여 (각 서버에 서명하는 한) 여러 서버를 신뢰할 수 있습니다.

자세한 내용은 이 위키 페이지를 참조하십시오 .


2

일반적으로이 문제는 키를 매우 자주 수정할 때 발생합니다. 서버에 따라 서버에서 생성하여 붙여 넣은 새 키를 업데이트하는 데 시간이 걸릴 수 있습니다. 따라서 키를 생성하고 서버에 붙여 넣은 후 3-4 시간 정도 기다렸다가 시도하십시오. 문제를 해결해야합니다. 나와 함께 일어났다.



0

이것을 호스트 서버에서 실행하십시오. 예측 문제입니다.

chmod -R 700 ~/.ssh

사람들에게 authorized_keys 및 공개 키에 대한 권한을 644에서 700으로 변경하도록 요청하고 있습니까? 600에서 700 사이의 개인 키?
nurettin

0

나는 같은 오류가 있었고 방금 나에게 일어난 것처럼 잘못된 권한이있을 수 있다는 사실에주의를 기울이고 싶었습니다. 디렉토리를 일반 또는 사용자 로
설정 했으므로 올바른 사용자 여야합니다. 이 오류가 나타 났을 때 나는 일반 사용자로 구성 되었습니다. 종료 하면 해결되었습니다..sshrootroot.sshroot


-3

아래의 서면 오류가 발생하는 문제를 해결합니다.
오류 :
'XXX.XXX.XXX'호스트의 인증을 설정할 수 없습니다.
RSA 키 지문은 09 : 6c : ef : cd : 55 : c4 : 4f : ss : 5a : 88 : 46 : 0a : a9 : 27 : 83 : 89입니다.

해결 방법 :
1. openSSH 도구를 설치하십시오.
2. ssh 명령을 실행하십시오.
3.이 호스트를 추가하라고 요청합니다. 예를 수락하십시오.
4.이 호스트는 알려진 호스트 목록에 추가됩니다.
5. 이제이 호스트와 연결할 수 있습니다.

이 솔루션은 현재 작동하고 있습니다 ...


이것은 질문에 대답하지 않습니다. 원래 (매우 오래된) 질문은 스크립트를 통해 이러한 프롬프트를 자동으로 확인하는 기능에 관한 것이 었습니다.
MasterAM

그것이 그를 위해 일했다면 아마도 다른 사람들을 위해 일할 것입니다. 실제로 유용한 것을
공감할

"ssh"를 실행하면 작동하지 않습니다. 옵션 사용법은 다음과 같습니다. ssh [..] [..] [..] [user @] hostname [command]
P Satish Patro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.