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.