이번 포스트에서는 SSH 접속 시 “Too many authentication failures” 오류 원인과 해결방법을 알아보려고 합니다. 리눅스 서버에 SSH로 접속하다가 갑자기 Received disconnect from x.x.x.x port 22:2: Too many authentication failures
라는 오류 메시지를 마주한 적이 있으신가요? 처음 이 오류를 보면 당황스럽지만, 사실 이는 매우 흔한 문제이며 몇 가지 간단한 방법으로 해결할 수 있습니다. 오늘은 이 성가신 오류가 왜 발생하는지, 그리고 어떻게 해결할 수 있는지 차근차근 알아보겠습니다.
1. “Too many authentication failures” 오류가 발생하는 이유
SSH 접속 시 이 오류가 발생하는 주된 이유는 인증 시도 횟수 제한에 걸렸기 때문입니다. SSH 서버는 보안상의 이유로 연속적인 인증 실패를 제한하는데, 일반적으로 6회 정도의 시도 후 연결을 차단합니다.
주요 원인들
- 다수의 SSH 키 보유: 클라이언트에 여러 개의 SSH 키가 있을 때 SSH 클라이언트가 모든 키를 차례대로 시도
- 잘못된 키 사용: 서버에 등록되지 않은 키를 사용하여 접속 시도
- SSH Agent의 키 관리 문제: ssh-agent에 여러 키가 로드되어 있어 불필요한 시도 발생
- 인증 방식 불일치: 서버가 요구하는 인증 방식과 클라이언트 설정이 맞지 않는 경우
실제로 저도 여러 프로젝트를 진행하면서 SSH 키가 늘어나다 보니 이런 문제를 자주 겪었는데요, 다행히 몇 가지 방법으로 깔끔하게 해결할 수 있었습니다.
2. 즉시 해결할 수 있는 임시 방법
급하게 서버에 접속해야 할 때 사용할 수 있는 빠른 해결책들입니다.
IdentitiesOnly 옵션 사용
가장 간단하고 효과적인 방법입니다:
ssh -o IdentitiesOnly=yes username@server-ip
이 옵션은 SSH 클라이언트가 ssh-agent에 있는 모든 키를 시도하지 않고, 명시적으로 지정된 키만 사용하도록 합니다.
특정 키 파일 지정
서버에 등록된 정확한 키를 알고 있다면:
ssh -i ~/.ssh/your-specific-key username@server-ip
공개키 인증 비활성화 (패스워드 사용)
패스워드로 접속하고 싶다면:
ssh -o PubkeyAuthentication=no username@server-ip
3. SSH Config 파일로 확실히 해결
매번 옵션을 입력하는 것이 번거롭다면, SSH 설정 파일을 수정하여 근본적으로 해결할 수 있습니다.
개별 호스트 설정
~/.ssh/config
파일을 편집하여 특정 서버에 대한 설정을 추가합니다:
vim ~/.ssh/config
다음과 같이 설정을 추가하세요:
Host myserver
HostName 192.168.1.100
User username
IdentityFile ~/.ssh/specific-key
IdentitiesOnly yes
전역 설정
모든 SSH 연결에 적용하고 싶다면:
Host *
IdentitiesOnly yes
이렇게 설정하면 앞으로는 단순히 ssh myserver
명령으로도 문제없이 접속할 수 있습니다.
4. SSH Agent 관리로 근본 원인 해결
SSH Agent에 많은 키가 로드되어 있을 때도 이 문제가 발생할 수 있습니다.
현재 로드된 키 확인
ssh-add -l
모든 키 제거
ssh-add -D
필요한 키만 추가
ssh-add ~/.ssh/your-needed-key
5. 서버 측 설정 확인 및 조정
서버 관리자라면 SSH 서버 설정도 확인해볼 필요가 있습니다.
MaxAuthTries 설정 확인
/etc/ssh/sshd_config
파일에서:
# 기본값은 보통 6
MaxAuthTries 10
디버그 모드로 연결 과정 확인
클라이언트에서 상세한 연결 과정을 보려면:
ssh -vvv username@server-ip
이 명령은 어떤 키들이 시도되고 있는지, 어디서 실패하는지 자세히 보여줍니다.
6. PuTTY 사용자를 위한 해결 방법
Windows 환경에서 PuTTY를 사용하는 분들도 동일한 문제를 겪을 수 있습니다. PuTTY에서는 Pageant(SSH 에이전트)와 관련된 추가적인 해결 방법들이 있어요.
PuTTY에서 발생하는 주요 원인
- Pageant에 많은 키 로드: Windows용 SSH 에이전트인 Pageant에 여러 키가 등록되어 있을 때
- GSSAPI 인증 활성화: 기본적으로 활성화된 GSSAPI 인증이 먼저 시도되면서 발생
- 키 파일 미지정: PuTTY 설정에서 특정 키를 지정하지 않아 모든 키가 시도되는 경우
PuTTY 설정으로 해결하기
방법 1: 특정 키 파일 지정
PuTTY 설정에서 다음과 같이 진행하세요:
- Session 탭에서 서버 정보 입력
- Connection > SSH > Auth > Credentials 이동
- Private key file for authentication에
.ppk
파일 경로 지정 - 설정 저장 후 접속
이렇게 하면 PuTTY가 Pageant의 다른 키들을 무시하고 지정된 키만 사용합니다.
방법 2: GSSAPI 인증 비활성화
때로는 GSSAPI 인증이 문제가 될 수 있습니다:
- Connection > SSH > Auth > GSSAPI 이동
- Attempt GSSAPI authentication (SSH-2 only) 체크 해제
- 설정 저장 후 재접속
방법 3: Pageant 인증 비활성화
Pageant 사용을 완전히 중단하려면:
- Connection > SSH > Auth > Credentials 이동
- Attempt authentication using Pageant 체크 해제
- 대신 패스워드 인증 사용
Pageant 관리하기
불필요한 키 제거
Pageant를 열고 사용하지 않는 키들을 제거하세요:
- 시스템 트레이의 Pageant 아이콘 더블클릭
- 불필요한 키 선택 후 Remove Key 클릭
- 필요한 키만 남겨두기
키 재추가
올바른 키만 다시 추가하려면:
- Add Key 버튼 클릭
- 서버에 등록된
.ppk
파일 선택 - 패스프레이즈 입력 (필요시)
7. 실제 상황별 해결 예시
예시 1: AWS EC2 인스턴스 접속
AWS에서 제공하는 키 페어를 사용할 때:
ssh -i ~/.ssh/aws-key.pem -o IdentitiesOnly=yes ec2-user@ec2-instance-ip
예시 2: GitHub과 서버 키가 혼재된 경우
GitHub용 키와 서버용 키가 모두 있을 때 ~/.ssh/config
설정:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/github-key
IdentitiesOnly yes
Host production-server
HostName prod.example.com
User deploy
IdentityFile ~/.ssh/production-key
IdentitiesOnly yes
예시 3: PuTTY에서 AWS EC2 접속
PuTTY로 EC2 인스턴스에 접속할 때:
- PuTTYgen으로
.pem
파일을.ppk
로 변환 - PuTTY 설정에서:
- Session:
ec2-user@your-ec2-ip
- Auth > Credentials: 변환한
.ppk
파일 경로 지정 - GSSAPI: 모든 옵션 체크 해제
- Session:
예시 4: PuTTY에서 패스워드 인증 강제 사용
키 인증 대신 패스워드를 사용하고 싶을 때:
- Connection > SSH > Auth > Credentials
- Attempt authentication using Pageant 체크 해제
- Private key file for authentication 필드 비우기
- 접속 시 패스워드 입력 프롬프트 대기
8. 문제가 지속될 때 추가 확인사항
위의 방법들로도 해결되지 않는다면:
네트워크 차단 확인
일부 서버는 특정 IP에서 여러 번 실패하면 일시적으로 접속을 차단합니다:
# 서버에서 fail2ban 로그 확인
sudo tail -f /var/log/fail2ban.log
서버 로그 확인
서버의 SSH 로그를 확인해보세요:
sudo tail -f /var/log/auth.log
“Too many authentication failures” 오류는 처음에는 당황스럽지만, 원인을 이해하고 나면 충분히 해결 가능한 문제입니다. 리눅스/맥에서는 IdentitiesOnly 옵션을, Windows PuTTY에서는 특정 키 파일 지정과 Pageant 관리가 핵심입니다.
플랫폼별 핵심 해결책:
-
- 리눅스/맥: SSH Config에
IdentitiesOnly yes
추가 - Windows PuTTY: 특정
.ppk
파일 지정 + Pageant 관리 - 공통: 불필요한 키 정리 및 체계적인 키 관리
- 리눅스/맥: SSH Config에
관련 링크: