본문 바로가기
운영체제/Windows

공개키 기반 암호없이 ssh 접속하기 (+ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 오류)

by eteo 2025. 4. 17.

 

 

 

 

 

공개키 기반 암호없이 ssh 접속하기

 

이 방법은 Remote가 Linux인 경우에 유효하다.

 

다음은 Local PC에서 진행하는 환경설정으로 윈도우인 경우엔 사전에 git bash가 필요하다.

 

 

 

1. 리눅스인 경우 쉘에서, 윈도우인 경우 git bash에서 'ssh-keygen'을 치고 질문이 나오면 엔터를 연타한다.

ssh-keygen

 

이렇게 하면 리눅스인 경우 ~/.ssh/ 경로에, 윈도우 git bash인 경우 C:\SPB_Data\.ssh\ 경로에 아래 두 파일이 생성된다.

  • id_rsa (공개키)
  • id_rsa.pub (비공개키)

 

 

 

 

2. 공개키를 서버로 복사한다.

ssh-copy-id 사용자@서버IP

 

생성한 공개키를 ssh-copy-id 명령을 통해 접속 대상 서버의 ~/.ssh/authorized_keys 파일에 추가한다.

 

 

 

 

 

 

3. 윈도우인 경우에만 git bash에서 생성된 공개키를 C:\Users\사용자이름\.ssh\ 디렉토리 안에 복사해준다. 

cp /c/SPB_Data/.ssh/id_rsa /c/Users/사용자이름/.ssh/

 

git bash에서 생성된 공개키는 C:\SPB_Data\.ssh\ 경로에 저장되는데, 명령 프롬프트에서 ssh를 사용할 때 기본적으로 참조하는 경로는 C:\Users\사용자이름\.ssh\이기 때문에 여기에도 같은 키를 복사해줘야 명령 프롬프트로도 암호 없이 서버에 접속할 수 있다.

 

 

 

 

 

 

서버를 재설치했더니 SSH 접속시 경고가 뜨는 경우 해결 방법

 

아래 메시지는 서버의 호스트 키가 바뀐 것을 SSH 클라이언트가 감지했을 때 발생하는 일반적인 경고다.

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

 

 

 

리눅스인 경우 쉘에서, 윈도우인 경우 명령 프롬프트에서 다음 명령을 입력한다.

ssh-keygen -R 서버IP

 

이렇게 하면 로컬의 .ssh/known_hosts 파일에서 해당 서버의 이전 호스트 키 정보를 찾아 지운다.

 

 

 

 

 

✔ ssh-copy-id 명령 사용 시 내부 동작은 다음과 같다.

# 1. 원격 서버에 .ssh 디렉토리 생성 및 권한 설정
ssh user@remote_host 'mkdir -p ~/.ssh && chmod 700 ~/.ssh'

# 2. authorized_keys 파일 생성 및 권한 설정
ssh user@remote_host 'touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'

# 3. 로컬 공개 키를 원격 서버에 추가
cat ~/.ssh/id_rsa.pub | ssh user@remote_host 'cat >> ~/.ssh/authorized_keys'