"Connection refused" 오류

이 오류는 SSH 서버가 실행되고 있지 않거나, SSH 서버가 접속을 거부할 때 발생하는 가장 일반적인 오류 중 하나이다. 다음과 같은 경우에 발생할 수 있다.

원인 1: SSH 서버가 실행 중이지 않음

대부분의 경우, SSH 서버가 시작되지 않았거나 중지된 상태일 수 있다. 이를 확인하려면 다음 명령어를 사용하여 SSH 데몬이 실행 중인지 확인할 수 있다:

sudo systemctl status sshd

서버가 실행 중이지 않다면 다음 명령어로 SSH 서버를 시작할 수 있다:

sudo systemctl start sshd

원인 2: 포트가 열려 있지 않음

SSH 서버가 실행 중이지만 SSH 포트가 열려 있지 않거나 방화벽에서 차단된 경우에도 "Connection refused" 오류가 발생할 수 있다. 이 경우 다음 명령어로 포트가 열려 있는지 확인한다:

sudo netstat -tuln | grep 22

만약 포트 22가 열려 있지 않다면, 방화벽 설정에서 포트를 열어야 한다:

sudo ufw allow 22/tcp

원인 3: 서버가 너무 많은 연결을 허용하지 않음

SSH 설정 파일에 설정된 MaxStartups 값에 따라 동시에 허용할 수 있는 연결 수가 제한될 수 있다. /etc/ssh/sshd_config 파일에서 MaxStartups 값을 확인하고, 필요한 경우 값을 높여 문제를 해결할 수 있다.

MaxStartups 10

"Permission denied" 오류

이 오류는 SSH 서버에 대한 인증이 실패했을 때 발생한다. 일반적으로 다음과 같은 경우에 나타난다.

원인 1: 잘못된 사용자 이름 또는 비밀번호

가장 일반적인 이유는 잘못된 사용자 이름이나 비밀번호로 로그인하려고 시도한 경우이다. 사용자가 정확한 사용자 이름과 비밀번호를 사용하고 있는지 확인해야 한다.

원인 2: 공개키 인증 실패

공개키 기반 인증을 사용하는 경우, 서버에 업로드된 공개키가 정확하지 않거나 권한이 올바르지 않을 때 발생할 수 있다. ~/.ssh/authorized_keys 파일에서 키를 확인하고, 파일 및 디렉토리 권한을 다음과 같이 설정해야 한다:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

원인 3: 파일 권한 문제

SSH 서버는 엄격한 파일 권한을 요구한다. 특히 홈 디렉토리 및 .ssh 디렉토리, 그리고 키 파일에 대해 잘못된 권한이 설정된 경우 "Permission denied" 오류가 발생할 수 있다. 이를 해결하려면 홈 디렉토리와 SSH 관련 파일의 권한을 올바르게 설정해야 한다.

chmod 700 ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa

"Host key verification failed" 오류

이 오류는 클라이언트가 서버의 호스트 키를 확인하지 못하거나 서버의 호스트 키가 변경된 경우 발생한다.

원인 1: 서버 호스트 키 변경

SSH는 서버의 호스트 키를 기억하고, 다음 접속 시 이 키가 일치하는지 확인한다. 만약 서버의 호스트 키가 변경되면 보안 경고와 함께 접속이 차단될 수 있다. 이를 해결하려면 ~/.ssh/known_hosts 파일에서 해당 서버의 이전 키를 삭제하고 다시 접속한다.

ssh-keygen -R <서버 IP 또는 도메인>

서버에 다시 접속하면 새로운 호스트 키를 확인할 수 있으며, 사용자는 이를 신뢰하고 접속을 이어갈 수 있다.

원인 2: 중간 공격

호스트 키가 변경된 이유가 중간자 공격일 가능성도 있다. 이는 서버가 아닌 제3자가 클라이언트와 서버 사이의 통신을 가로채려고 시도하는 경우 발생할 수 있다. 이 경우 서버 관리자와 직접적으로 연락하여 호스트 키의 정당성을 확인하는 것이 좋다.

"Too many authentication failures" 오류

SSH 클라이언트가 여러 인증 시도를 실패하면 이 오류가 발생한다.

원인 1: 너무 많은 키 파일 시도

클라이언트가 서버에 접속할 때, 로컬 머신에 저장된 여러 SSH 키를 시도하게 되며, 서버 측에서는 너무 많은 인증 시도가 들어오면 이를 차단할 수 있다. 이를 해결하기 위해서는 명령어에 -o IdentitiesOnly=yes 옵션을 추가하여 특정 키만을 사용하도록 할 수 있다.

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_rsa user@server

원인 2: 인증 시도 제한 초과

서버의 MaxAuthTries 설정에 의해 인증 시도 횟수가 제한되어 있을 수 있다. /etc/ssh/sshd_config 파일에서 MaxAuthTries 값을 확인하고 필요한 경우 값을 증가시킨다.

MaxAuthTries 6

"Read from socket failed: Connection reset by peer" 오류

이 오류는 서버와의 연결이 비정상적으로 끊겼을 때 발생하는 오류이다. 이는 네트워크 문제나 서버 측의 설정으로 인해 발생할 수 있다.

원인 1: 서버 측에서 연결을 끊음

서버가 과도한 연결을 받거나 특정 사용자의 연결을 제한하려고 설정된 경우 발생할 수 있다. sshd_config 파일에서 ClientAliveIntervalClientAliveCountMax 값을 확인하고, 필요한 경우 클라이언트 연결을 유지하기 위한 설정을 수정할 수 있다.

ClientAliveInterval 60
ClientAliveCountMax 3

이 설정은 클라이언트가 응답하지 않을 때 서버가 얼마나 오래 기다릴지를 결정한다.

원인 2: 네트워크 문제

네트워크 환경에 따라 패킷 손실이나 방화벽 규칙으로 인해 연결이 갑작스럽게 끊길 수 있다. 이 경우 클라이언트 측에서 TCPKeepAlive 설정을 통해 연결을 안정적으로 유지할 수 있다.

ssh -o TCPKeepAlive=yes user@server

원인 3: 방화벽 또는 라우터 설정

서버와 클라이언트 간에 존재하는 방화벽이나 라우터가 일정 시간이 지나면 비활성 연결을 종료할 수 있다. 이 경우 방화벽 설정을 조정하거나, 서버 측의 SSH 설정에서 KeepAlive 옵션을 활성화할 수 있다.

TCPKeepAlive yes

"Could not resolve hostname" 오류

이 오류는 SSH 클라이언트가 제공된 호스트 이름을 DNS에서 찾을 수 없을 때 발생한다.

원인 1: 잘못된 호스트 이름

클라이언트가 잘못된 호스트 이름을 제공했을 경우 발생할 수 있다. 이 경우 올바른 서버 주소를 확인하고, 호스트 이름 또는 IP 주소를 정확하게 입력했는지 확인해야 한다.

원인 2: DNS 서버 문제

DNS 서버가 해당 호스트 이름을 해석하지 못하는 경우 발생할 수 있다. 이 경우 클라이언트 측에서 DNS 설정을 확인하고, IP 주소를 직접 입력하여 접속을 시도할 수 있다.

ssh user@<서버 IP 주소>

원인 3: 로컬 호스트 파일 설정 문제

호스트 파일 /etc/hosts에 서버 이름이 잘못 정의되어 있는 경우에도 문제가 발생할 수 있다. 이 파일을 열어 올바른 서버 정보를 확인하고 수정할 수 있다.

"No route to host" 오류

이 오류는 네트워크 경로에 문제가 있을 때 발생한다. 일반적으로 서버와의 연결이 완전히 차단된 상태에서 나타난다.

원인 1: 네트워크 문제

클라이언트와 서버 사이의 네트워크 연결에 문제가 있을 수 있다. 이 경우 네트워크 연결 상태를 확인하고, 방화벽이나 라우터 설정을 점검해야 한다.

ping <서버 IP 주소>

원인 2: 방화벽 설정 문제

서버 또는 클라이언트 측 방화벽 설정이 연결을 차단할 수 있다. 서버의 방화벽 설정을 확인하고 SSH 포트가 허용되어 있는지 확인한다.

sudo ufw allow 22/tcp

원인 3: 라우터 문제

특정 라우터에서 SSH 트래픽을 차단하거나 라우팅 경로가 잘못된 경우에도 이 오류가 발생할 수 있다. 이 경우 라우터 설정을 확인하거나 네트워크 관리자와 상의해야 한다.

"SSH timeout" 오류

이 오류는 SSH 클라이언트가 서버로부터 응답을 받지 못해 시간이 초과될 때 발생한다.

원인 1: 서버 측 대기 시간 초과

서버가 클라이언트의 요청을 처리하는 동안 시간이 오래 걸리거나, 서버가 과부하 상태인 경우 발생할 수 있다. 이 경우 서버의 설정에서 ClientAliveInterval을 증가시켜 클라이언트와의 연결을 유지할 수 있다.

ClientAliveInterval 120

원인 2: 클라이언트 측 대기 시간 초과

클라이언트에서 대기 시간을 너무 짧게 설정한 경우 발생할 수 있다. 이 경우 SSH 명령에 ConnectTimeout 옵션을 추가하여 대기 시간을 증가시킬 수 있다.

ssh -o ConnectTimeout=30 user@server

원인 3: 네트워크 대역폭 문제

네트워크 대역폭이 충분하지 않거나 네트워크가 불안정한 경우에도 시간이 초과될 수 있다. 이 경우 네트워크 상태를 점검하거나 네트워크 관리자와 협력하여 문제를 해결해야 한다.