# 기본 설정 파일 분석 (ssh\_config, sshd\_config)

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