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
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
은 최대 허용 가능한 인증 시도 수를 의미한다.