OpenSSH는 클라이언트와 서버 양쪽 모두에서 설정 파일을 통해 동작을 제어할 수 있다. 클라이언트 설정 파일은 ssh_config로, 서버 설정 파일은 sshd_config로 각각 다르게 관리된다. 이 파일들은 OpenSSH 동작의 대부분을 정의하며, 이를 이해하는 것이 OpenSSH 환경을 설정하고 최적화하는 데 중요하다.

클라이언트 설정 파일: ssh_config

ssh_config 파일은 SSH 클라이언트 측의 동작을 제어하는 설정 파일이다. 이 파일은 사용자가 SSH로 원격 서버에 접속할 때 적용되는 옵션들을 정의한다.

Host

Host는 특정 호스트에 대해 설정을 적용할 때 사용된다. 기본적으로 Host *는 모든 호스트에 대해 적용되며, 특정 호스트에 대해서는 다음과 같은 구문으로 설정한다:

Host example.com
   User myuser
   Port 2222

위의 설정은 example.com에 접속할 때 사용자 이름을 myuser로 하고 포트를 2222로 사용한다. Host 별로 세분화된 설정을 적용함으로써 다양한 서버에 대한 접속 방법을 다르게 설정할 수 있다.

Port

Port는 SSH 서버에 접속할 때 사용할 포트를 정의한다. 기본값은 22번 포트이며, 클라이언트는 이를 통해 서버에 접속한다.

Port 22

하지만 보안이나 기타 이유로 포트를 변경하는 경우 다음과 같이 설정할 수 있다:

Port 2222
IdentityFile

IdentityFile 옵션은 인증에 사용할 개인 키 파일을 지정한다. SSH는 기본적으로 ~/.ssh/id_rsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 파일을 참조하지만, 다른 키 파일을 사용하고자 할 때 다음과 같이 설정한다:

IdentityFile ~/.ssh/my_custom_key

여러 키를 지정할 수 있으며, 순차적으로 키를 시도한다:

IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/my_custom_key
User

User는 SSH 접속 시 사용할 기본 사용자를 정의한다. 이를 통해 매번 접속할 때 사용자 이름을 입력할 필요가 없다:

User myuser
ForwardAgent

ForwardAgent 옵션은 SSH 에이전트를 통해 클라이언트의 인증 정보를 서버로 전달할지를 결정한다. 이 설정을 활성화하면, 중간에 여러 대의 서버를 경유할 때 인증서가 전달되어 추가 인증 없이 접속이 가능한다.

ForwardAgent yes

이 옵션을 사용하는 경우, 보안성을 위해 SSH 에이전트를 신뢰할 수 있는 환경에서만 사용해야 한다.

서버 설정 파일: sshd_config

sshd_config 파일은 SSH 서버의 동작을 제어하는 설정 파일이다. 여기서는 서버의 접속 방식, 인증 방법, 보안 설정 등을 정의한다.

Port

서버에서 SSH 서비스가 동작하는 포트를 설정하는 옵션이다. 기본적으로 22번 포트가 사용되며, 보안 강화나 다른 이유로 포트를 변경할 수 있다.

Port 22

만약 다른 포트를 사용하고자 한다면 다음과 같이 설정한다:

Port 2222
PermitRootLogin

PermitRootLogin 옵션은 루트 사용자로 직접 SSH 로그인하는 것을 허용할지를 결정한다. 보안 상의 이유로 루트 로그인은 비활성화하는 것이 일반적이다.

PermitRootLogin no

필요한 경우 다음과 같이 루트 로그인을 허용할 수 있다:

PermitRootLogin yes
PasswordAuthentication

PasswordAuthentication 옵션은 비밀번호 인증을 허용할지 여부를 설정한다. 보안 강화를 위해 비밀번호 인증을 비활성화하고 공개키 인증을 사용하는 것이 권장된다.

PasswordAuthentication no

비밀번호 인증을 허용하려면 다음과 같이 설정한다:

PasswordAuthentication yes
PubkeyAuthentication

PubkeyAuthentication 옵션은 공개키 인증을 허용할지 여부를 설정한다. 공개키 인증은 보안성이 높기 때문에 대부분의 경우 활성화되어야 한다.

PubkeyAuthentication yes
AllowUsers

AllowUsers 옵션은 SSH로 접속할 수 있는 사용자를 지정한다. 특정 사용자만 접속하도록 설정할 때 유용하다.

AllowUsers myuser@192.168.1.*

여러 사용자를 허용하려면 다음과 같이 설정할 수 있다:

AllowUsers myuser anotheruser
MaxAuthTries

MaxAuthTries 옵션은 인증 실패 시 허용되는 최대 시도 횟수를 정의한다. 기본값은 6이며, 더 적은 값으로 설정하여 보안을 강화할 수 있다.

MaxAuthTries 3
UsePAM

UsePAM 옵션은 Linux PAM(Pluggable Authentication Modules)을 통한 인증을 활성화할지 여부를 결정한다. 기본적으로 yes로 설정되어 있으며, 이를 통해 유연한 인증 정책을 적용할 수 있다.

UsePAM yes

PAM을 비활성화하려면 다음과 같이 설정할 수 있다:

UsePAM no
ChallengeResponseAuthentication

ChallengeResponseAuthentication 옵션은 챌린지 응답 기반 인증을 활성화할지 여부를 설정한다. 보안 강화를 위해 기본적으로 비활성화되어 있으며, 특별한 인증 방식이 필요하지 않은 한 비활성화 상태를 유지하는 것이 좋다.

ChallengeResponseAuthentication no
X11Forwarding

X11Forwarding 옵션은 SSH를 통해 X11 그래픽 애플리케이션을 원격으로 실행할 수 있도록 허용한다. 기본적으로 보안상의 이유로 비활성화되어 있다. 이 기능을 사용하려면 다음과 같이 설정할 수 있다:

X11Forwarding yes
AllowTcpForwarding

AllowTcpForwarding 옵션은 TCP 포트 포워딩을 허용할지 여부를 설정한다. SSH를 이용한 포트 포워딩을 활성화하고자 할 때 사용되며, 기본적으로 활성화되어 있다. 만약 보안상의 이유로 비활성화하려면 다음과 같이 설정한다:

AllowTcpForwarding no
ClientAliveInterval

ClientAliveInterval 옵션은 서버가 클라이언트로 생존 신호(heartbeat)를 보낼 시간 간격을 설정한다. 서버는 일정 시간 동안 클라이언트로부터 응답이 없으면 연결을 종료할 수 있다. 이 값은 초 단위로 설정되며, 클라이언트의 응답을 확인하기 위한 빈도이다.

ClientAliveInterval 60

이 설정은 클라이언트의 유휴 상태를 감지하여, 비정상적인 연결을 종료하는 데 사용된다.

ClientAliveCountMax

ClientAliveCountMax 옵션은 서버가 클라이언트로 생존 신호를 몇 번 보낼지를 정의한다. 기본값은 3이며, 이 값만큼 신호를 보내고도 응답이 없으면 연결이 종료된다. 만약 클라이언트가 응답하지 않을 때까지 서버가 기다릴 시간을 연장하려면 값을 조정할 수 있다.

ClientAliveCountMax 3
LogLevel

LogLevel 옵션은 SSHD의 로그 기록 수준을 결정한다. 설정 가능한 값은 QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3 등이 있으며, 기본값은 INFO이다. 디버깅 시에는 DEBUG 이상의 값을 사용할 수 있다.

LogLevel INFO

로그 수준을 DEBUG3로 설정하면 매우 상세한 로그가 기록되지만, 이는 성능에 영향을 미칠 수 있으므로 조심해야 한다.

LogLevel DEBUG3

Banner 옵션은 사용자에게 SSH 접속 시 표시할 배너 메시지를 지정한다. 보안 정책을 알리거나, 법적 고지를 표시하는 데 사용된다.

Banner /etc/issue.net

배너 파일을 비워 두면 SSH 접속 시 별도의 메시지가 표시되지 않는다.

MaxSessions

MaxSessions 옵션은 하나의 SSH 연결에서 허용되는 최대 세션 수를 설정한다. 이 옵션은 여러 세션을 열어 많은 작업을 동시에 처리하는 사용자를 제한할 수 있다.

MaxSessions 10
MaxStartups

MaxStartups 옵션은 동시에 인증 시도 중인 연결의 수를 제한한다. 이 옵션은 DoS(Denial of Service) 공격을 방지하는 데 유용하다.

MaxStartups 10:30:60

이 값은 다음과 같은 형식으로 설정된다: start:rate:full. 여기서 start는 최대 인증 시도 수를, rate는 새로운 연결이 들어올 때의 확률, full은 최대 허용 가능한 인증 시도 수를 의미한다.