SSH 서버에서의 비밀번호 인증 기본 개념

SSH 프로토콜은 네트워크 상에서 안전하게 통신하기 위해 사용되며, 그 중에서 비밀번호 인증은 가장 일반적인 방법이다. 비밀번호 인증 방식은 사용자가 원격 서버에 접속할 때, 미리 설정된 사용자 계정과 비밀번호를 입력하여 서버에 인증을 요청하고, 서버는 해당 정보가 올바른지 확인한 후 접속을 허용한다.

SSH 비밀번호 인증 방식은 다음과 같은 흐름으로 작동한다:

  1. 사용자가 SSH 클라이언트를 통해 서버에 접속을 시도한다.
  2. 서버는 클라이언트로부터 사용자의 계정명과 비밀번호를 요청한다.
  3. 클라이언트는 비밀번호를 서버로 전송한다.
  4. 서버는 해당 비밀번호가 저장된 사용자 정보와 일치하는지 확인한다.
  5. 일치하는 경우, 서버는 접속을 허가하고, 일치하지 않으면 접속을 거부한다.

SSH 서버 설정에서 비밀번호 인증 활성화

비밀번호 인증을 활성화하려면 SSH 서버 설정 파일 sshd_config에서 PasswordAuthentication 옵션을 설정해야 한다. 이 옵션이 활성화되어 있으면 SSH 서버는 비밀번호 인증을 허용한다.

설정 파일에서 아래와 같은 항목을 찾아 설정한다:

PasswordAuthentication yes

이 설정이 yes로 되어 있어야 SSH 비밀번호 인증이 가능하다. 만약 비밀번호 인증을 비활성화하고자 한다면, PasswordAuthentication 값을 no로 변경하면 된다. 예를 들어, 공개키 인증만을 사용할 경우, 비밀번호 인증을 비활성화하는 것이 보안 측면에서 더 유리하다.

설정 파일을 변경한 후, SSH 서버를 다시 시작해야 변경 사항이 반영된다:

sudo systemctl restart sshd

SSH 클라이언트에서 비밀번호 인증 방식 사용

SSH 클라이언트에서 비밀번호 인증을 사용하여 서버에 접속하려면 기본적으로 SSH 클라이언트는 사용자의 계정과 비밀번호를 물어보는 프롬프트를 제공한다. 이를 통해 사용자는 비밀번호를 입력하고, 서버로부터 인증을 받게 된다.

사용자는 다음과 같이 SSH 명령어를 통해 서버에 접속할 수 있다:

ssh username@hostname

이 명령어를 실행하면 SSH 클라이언트는 서버에 접속 시도 후, 사용자의 비밀번호를 물어본다.

비밀번호 저장 및 자동 입력

보안상 좋지 않지만, 특정 상황에서는 비밀번호를 자동으로 입력하는 것이 필요할 수 있다. 예를 들어, SSH 접속을 스크립트로 자동화할 때 비밀번호 입력을 자동화하는 방식이 사용된다. 이 경우 sshpass와 같은 도구를 사용할 수 있다.

sshpass -p "password" ssh username@hostname

이 명령어를 사용하면 비밀번호를 명령어에 직접 포함시켜 SSH 접속을 시도할 수 있다. 그러나 이 방법은 비밀번호가 평문으로 노출되므로 매우 신중하게 사용해야 한다.

비밀번호 인증의 보안 취약점

비밀번호 인증은 상대적으로 간편하지만, 보안상 취약한 면이 있다. 주로 비밀번호가 추측 당하거나 무차별 대입 공격(brute-force attack)에 노출될 수 있기 때문이다. 이런 문제를 완화하기 위해 SSH 서버는 여러 가지 보안 강화 기법을 제공한다.

  1. 강력한 비밀번호 정책 적용
    서버에서 비밀번호 정책을 강화하는 것이 필수적이다. 사용자는 반드시 강력한 비밀번호를 사용해야 하며, 비밀번호는 다음의 기준을 만족해야 한다:
  2. 최소 12자리 이상
  3. 대문자, 소문자, 숫자, 특수문자 포함
  4. 주기적인 비밀번호 변경 요구

  5. 비밀번호 시도 제한
    비밀번호 시도 횟수를 제한하여 무차별 대입 공격을 방어할 수 있다. 이를 위해 sshd_config 파일에서 MaxAuthTries 옵션을 설정할 수 있다.

bash MaxAuthTries 3

이 설정은 사용자가 최대 3번까지 비밀번호를 입력할 수 있도록 허용하며, 그 이후에는 접속 시도가 차단된다. 이 설정을 통해 무차별 대입 공격을 어렵게 만들 수 있다.

  1. Fail2ban 사용
    SSH 서버에 대한 무차별 대입 공격을 방지하는 또 다른 방법은 fail2ban 같은 소프트웨어를 사용하는 것이다. fail2ban은 서버의 로그를 모니터링하여 비밀번호 입력 실패가 여러 번 발생할 경우, 해당 IP를 차단한다.

다음은 fail2ban 설치 및 설정 과정의 예시다:

bash sudo apt-get install fail2ban

설치 후, /etc/fail2ban/jail.local 파일에서 SSH에 대한 설정을 다음과 같이 할 수 있다:

bash [sshd] enabled = true port = ssh logpath = /var/log/auth.log maxretry = 3

위 설정은 비밀번호 인증 실패가 3회 이상 발생하면 해당 IP를 차단하도록 설정한 것이다.

SSH 비밀번호 인증과 PAM 모듈 연동

SSH의 비밀번호 인증은 기본적으로 Pluggable Authentication Modules (PAM)과 연동하여 확장된 인증 방식들을 제공할 수 있다. PAM을 사용하면 SSH의 비밀번호 인증에 다양한 인증 방법과 보안 정책을 추가할 수 있다.

  1. PAM 설정 파일 구성
    PAM 설정 파일은 /etc/pam.d/sshd에 위치해 있다. 이 파일에서 SSH와 관련된 PAM 모듈 설정을 확인할 수 있다. 예를 들어, pam_unix.so는 기본적인 유닉스 계정 인증을 제공하는 모듈이다.

bash auth required pam_unix.so

  1. PAM 모듈을 통한 추가 보안 정책
    PAM을 이용하면 계정 잠금 정책, 비밀번호 복잡도 요구사항, 2단계 인증 등의 추가적인 보안 정책을 적용할 수 있다. PAM 모듈의 사용은 시스템 전체의 인증 메커니즘을 더 안전하게 만드는 데 기여할 수 있다.

비밀번호 인증 비활성화

SSH 보안을 한층 강화하기 위해 비밀번호 인증을 완전히 비활성화할 수도 있다. 비밀번호 인증을 비활성화하고 공개키 인증만을 사용할 경우, 원격 접속 시 비밀번호 없이도 보안성을 유지할 수 있다.

sshd_config 파일에서 PasswordAuthentication 값을 no로 설정한다:

PasswordAuthentication no

이 설정은 SSH 서버에서 비밀번호 인증을 완전히 차단하며, 이로 인해 비밀번호 기반 공격에 대한 취약성을 줄일 수 있다. 비밀번호 인증을 비활성화할 때는 반드시 공개키 인증을 미리 설정하고 테스트해야 한다.