ssh-keygen을 사용해서 접속설정을 정상적으로 한것 같은데, 접속해보면 비밀번호를 요구하는 경우가 있습니다.
1. OS 별로 개행(줄바꿈) 설정이 다른 경우
Windows에서 ssh-keygen을 통해 ssh key file을 만들어서 linux remote server에 접속하는 경우에 이런 에러를 겪을 수 있습니다(윈도우 로컬 PC에서 우분투 서버에 ssh 접속 에러), 이유는 Windows는 줄바꿈 설정이 "CRLF" 인데, linux(Ubuntu 등)은 "LF"이기 때문입니다.
이런 경우는 vscode에서 ssh key file을 열어보면 확인할 수 있습니다. Windows에서 생성한 파일의 경우 우측 하단에 CRLF라고 줄바꿈 설정이 기본으로 되어 있는 것을 확인할 수 있습니다. "CRLF"라고 쓰여진 곳을 클릭하면 설정을 바꿀 수 있습니다. 내가 사용하는 로컬 컴퓨터는 윈도우인데, 원격 서버가 우분투인 경우, 로컬에 Windows용 git을 설치한 후 git bash를 실행하여 ssh-keygen을 하면 이런 경우를 방지할 수 있습니다.
2. authorized_keys 파일이나 .ssh 폴더의 권한설정 문제
원격 서버의 authorized_keys 파일이나 .ssh 폴더의 파일 권한이 잘못 설정되어 있는 경우 정상적으로 접속이 되지 않을 수 있습니다. 각각의 권한을 authorized_keys 파일은 600, .ssh 폴더는 700으로 설정해주세요.
chmod 600 .ssh/authorized_keys
chmod 700 .ssh
3. HOME 디렉토리 권한설정 문제
제가 겪었던 문제로, 구글링을 해도 나오지 않는 경우였습니다. 여러명이 사용하는 원격서버인데, 제 HOME 디렉토리 권한을 777로 다 열어두었고 그대로 방치했던 경우가 있었습니다. HOME 디렉토리 권한은 711로 설정해주세요.
ssh-keygen이 OS나 여러가지 설정에 따라서 작동하지 않는 경우들을 정리해보았습니다.
4. 기타 다른 문제들
ssh 접속시 문제가 생길 경우 ssh 명령어에 -v 옵션을 넣어 무엇이 문제인지 확인해볼 수 있습니다. 아래는 예시이고, 길어서 뒷내용은 생략하였는데, 위에 제가 작성한 3가지 방법으로도 해결이 안된다면 -v 옵션을 넣어 출력 결과를 읽어보고 해결하시기 바랍니다.
C:\Users\root>ssh -p 22 -v root@215.192.21.102
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
debug1: Reading configuration data C:\\Users\\root/.ssh/config
debug1: C:\\Users\\root/.ssh/config line 1: Applying options for 215.192.21.102
debug1: Connecting to 215.192.21.102 [215.192.21.102] port 22.
debug1: Connection established.
debug1: identity file C:\\Users\\root\\.ssh\\id_rsa type 0
debug1: identity file C:\\Users\\root\\.ssh\\id_rsa-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_for_Windows_8.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
너무 길어서 나머지는 생략