SSH(Secure Shell)는 원격 서버에 안전하게 접속할 수 있는 프로토콜입니다. RSA 키를 이용하여 비밀번호 없이 SSH 접속을 설정하는 과정은 많은 사용자들에게 유용합니다. 하지만 설정 과정에서 문제가 발생할 수 있으며, 이 경우에는 몇 가지 점검 사항을 따라야 합니다.
SSH 비밀번호 없는 접속 설정
RSA 키 생성 및 설정
SSH 비밀번호 없는 접속을 위해서는 먼저 RSA 키를 생성해야 합니다. 이 키는 개인 키와 공개 키로 구성되며, 공개 키는 원격 서버에 설정됩니다.
-
RSA 키 생성
bash
ssh-keygen -t rsa -b 2048
이 명령어를 실행하면 개인 키와 공개 키가 생성됩니다. 기본적으로~/.ssh/id_rsa에 개인 키가 저장되고,~/.ssh/id_rsa.pub에 공개 키가 저장됩니다. -
공개 키 추가
특정 계정의.ssh디렉토리에authorized_keys파일을 생성하고, 그 안에id_rsa.pub의 내용을 추가합니다.
bash
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys -
sshd_config 파일 수정
SSH 서버의 설정 파일인sshd_config를 수정하여 공개 키 인증을 활성화합니다.
bash
sudo nano /etc/ssh/sshd_config
다음과 같은 설정을 확인 및 수정합니다:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys -
SSH 접속
이제 아래 명령어로 비밀번호 없이 접속할 수 있습니다.
bash
ssh -i ~/.ssh/id_rsa user@host
SSH 접속 실패 시 점검 사항
설정을 마쳤음에도 불구하고 SSH 접속이 되지 않는 경우 다음 단계를 통해 문제를 확인해야 합니다.
1. authorized_keys 파일 권한 확인
authorized_keys 파일의 권한이 올바르게 설정되어 있는지 확인합니다. 소유자만 읽고 쓸 수 있어야 하며, 그룹과 다른 사용자에게는 쓰기 권한이 없어야 합니다.
bash
chmod 600 ~/.ssh/authorized_keys
ls -al ~/.ssh/
2. SSH 접속 상세 로그 확인
SSH 접속 시 -v 옵션을 사용하여 상세 로그를 확인할 수 있습니다.
bash
ssh -v -i ~/.ssh/id_rsa user@host
로그에 Authentiations that can continue: publickey,gssapi-keyex,gssapi-with-mic,password와 같은 메시지가 나타나면, 원격 서버의 인증 로그를 확인해야 합니다.
3. Auth log 확인
CentOS의 경우 /var/log/secure 파일을 확인하여 오류 메시지를 찾아봅니다. 예를 들어, 아래와 같은 메시지가 있을 수 있습니다.
Authentication refused: bad ownership or modes for directory /home/user
4. 디렉토리 권한 확인
해당 계정의 홈 디렉토리 권한을 확인해야 합니다. SSH 접속을 위해서는 홈 디렉토리의 권한이 755를 초과해서는 안 됩니다.
bash
ls -ld /home/user
chmod 755 /home/user
이 모든 과정을 확인한 후 다시 SSH 키로 접속을 시도하면 비밀번호 없이 정상적으로 로그인될 것입니다.
자주 묻는 질문
RSA 키를 생성할 때 어떤 옵션을 사용해야 하나요?
RSA 키 생성 시 -t rsa -b 2048 옵션을 사용하여 RSA 알고리즘을 선택하고 키 길이를 2048비트로 지정하는 것이 일반적입니다.
SSH 접속 시 비밀번호가 계속 요구되는 이유는 무엇인가요?
주로 authorized_keys 파일의 권한 설정이나 홈 디렉토리의 권한이 잘못되어 있을 경우 비밀번호 요청이 발생합니다. 권한 설정을 재확인해야 합니다.
SSHD 설정을 변경한 후 서비스 재시작이 필요한가요?
네, sshd_config 파일을 수정한 후에는 SSH 서비스를 재시작해야 변경 사항이 적용됩니다.
bash
sudo systemctl restart sshd
공개 키 인증이 작동하지 않는 경우 어떤 로그를 확인해야 하나요?
SSH 접속 시 -v 옵션을 사용하여 상세 로그를 확인하고, 서버 측의 /var/log/secure 파일에서 인증 관련 오류 메시지를 찾아보는 것이 도움이 됩니다.