ssh server key 관련 문의

익명 사용자의 이미지

안녕하세요~

관리 부실로 서버에 문제가 생겨 도움 요청드립니다.

클라이언트에서 서버로 ssh 접속하는 스크립트에서 비밀번호 입력없이 접속하게 하려고
클라이언트 .ssh/known_hosts 파일에 서버 정보를 미리 설정해 두었었습니다.

현재 서버에 문제가 생겨 새로 설치했구요. 원래 데이터는 복구하지 못했습니다.

클라이언트에서 접속 시도시 아래와 같이 출력됩니다.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 ECDSA key sent by the remote host is
SHA256:qESVYiW0PJhlQ3+gA82oOmcrS8D2XSfSpp4PHB4To3o.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /root/.ssh/known_hosts:1
ECDSA host key for [1.215.xxx.xxx]:22 has changed and you have requested strict checking.
Host key verification failed

서버를 새로 설치해서 생긴 문제 같은데.. 이전 서버의 데이타가 없습니다.....ㅜㅜ

클라이어트의 known_hosts 파일
$~/.ssh# cat known_hosts
[1.215.xxx.xxx]:22 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJ4DBuMSZlgF8vfV0CF2+qLaA1Ia5KwJXJUY14zx0KFCb9xqtU4XCYxMh+MpP3NvigCvsdmiPAJEkJfsMh5YzMU=

혹시 클라이언트의 known_hosts 파일의 내용으로 ssh server를 설정할 수 있을까요?

읽어 주셔서 감사합니다.

김정균의 이미지

client 의 ~/.ssh/config 를 만들어 다음의 설정을 넣어 주세요.

Host *
    CheckHostIP no
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no
익명 사용자의 이미지

unsafe -> safe 순서대로.

1. StrictHostKeyChecking no

자세한 방법은 https://kldp.org/comment/641961#comment-641961 참고.

죽었다 깨어나도 man-in-the-middle attack 따위는 있을 수 없는 상황, 예컨대...
(1) 공격자가 절대 존재할 수 없는 경우 (e.g., 접속하는 과정에서 이미 인증을 거치는 사설 네트워크)
(2) 공격받아도 잃을 게 전혀 없는 무가치 표적

뭐 이런 경우에는 복잡하게 호스트 키 같은 거 고민할 필요 없이 그냥 꺼 버리면 됩니다.

2. Man-in-black

클라이언트의 known_hosts 파일에서 [1.215.xxx.xxx]:22를 포함하는 줄을 찾아서 다 지워버립니다.
그 뒤 다시 접속 시도하면 ssh이 "처음 보는 호스트인데 호스트 키 등록할까요?" 하고 물어볼 겁니다. y 하면 됩니다.

보통 linux + ssh 입문자들에게 "처음 접속할 땐 이렇게 막 뭐라뭐라 뜨는데 그냥 예 눌러" 이렇게 가르치곤 하는데, 딱 그 수준의 보안입니다.

처음 한 번을 확실히 믿어줄 수 있다면, 그 뒤에 누군가 man-in-the-middle attack을 시도하면 탐지할 수 있습니다.

다만 그 처음 한 번이 문제.

3. 돌 다리도 두드려 가면서...

(1) 새로 세팅한 서버에서 아래 명령어를 실행하여 host key fingerprint를 출력합니다.

SSH_DIR="/etc/ssh" # 보통 이 위치인데 혹시 다르다면 알아서 세팅하세요.
 
for pubkey in ${SSH_DIR}/*.pub; do
    ssh-keygen -lf "${pubkey}"
done

(2) 클라이언트에서 해당 서버의 pubkey를 스캔하여 임시로 파일에 출력합니다.

ssh-keyscan -p 22 1.215.xxx.xxx > server_pubkey

(3) 클라이언트에서 획득한 서버 pubkey의 fingerprint를 출력합니다.

ssh-keygen -lf server_pubkey

(4) 이 과정이 제일 중요합니다. (1)에서 출력한 결과와 (3)에서 출력한 결과가 같아야 합니다.

(1)은 서버에서 출력한 것이고 (3)은 클라이언트에서 출력한 것이죠.
직접 두 컴퓨터를 확인할 수 있으면 가장 좋고, 그렇지 못하다면 신뢰할 수 있는 사람을 보내서 신뢰할 수 있는 통신수단을 거쳐 결과를 비교해야 합니다.

만약 두 결과가 동일하지 않다면, 클라이언트는 잘못된 (누군가 위조했을 수 있는) 호스트 키를 받고 있는 겁니다.

(5) 두 결과가 동일하다면 만사형통입니다.

known_hosts에서 기존 키를 지우고, server_pubkey의 내용을 덧붙이세요. 끝.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.