# 초기 설정 및 서비스 시작

#### OpenSSH 데몬 활성화 및 상태 확인

OpenSSH 설치가 완료되면, 먼저 SSH 데몬이 실행 중인지 확인하고, 활성화할 필요가 있다. OpenSSH 데몬의 상태는 `systemctl` 명령을 통해 확인할 수 있다.

```bash
sudo systemctl status sshd
```

이 명령어는 SSH 데몬의 상태를 보여준다. 만약 데몬이 실행 중이지 않다면, 다음 명령어로 시작할 수 있다:

```bash
sudo systemctl start sshd
```

그리고 SSH 데몬을 부팅 시 자동으로 시작되도록 설정하려면 다음 명령어를 사용한다:

```bash
sudo systemctl enable sshd
```

#### 설정 파일 구성

SSH 서비스는 두 개의 주요 설정 파일에 의해 관리된다: `ssh_config`와 `sshd_config`. 각각의 역할은 다음과 같다:

* `ssh_config`: 클라이언트 설정 파일
* `sshd_config`: 서버 설정 파일

일반적으로 SSH 서버를 설정할 때는 `sshd_config` 파일을 편집하여 원하는 설정을 적용한다. 이 파일은 `/etc/ssh/sshd_config` 경로에 위치해 있다. 파일을 수정하기 전에 백업을 생성하는 것이 좋다:

```bash
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
```

#### 기본 포트 설정 변경

기본적으로 SSH는 22번 포트를 사용하지만, 보안을 강화하기 위해 다른 포트로 변경하는 것이 권장된다. 다음과 같이 `sshd_config` 파일에서 포트를 변경할 수 있다:

```bash
sudo nano /etc/ssh/sshd_config
```

파일에서 다음 줄을 찾아 수정한다:

```plaintext
#Port 22
```

이를 예를 들어 2222번 포트로 변경하려면, 주석을 제거하고 22를 2222로 변경한다:

```plaintext
Port 2222
```

파일을 저장한 후 SSH 데몬을 다시 시작해야 변경 사항이 적용된다:

```bash
sudo systemctl restart sshd
```

#### 루트 로그인 비활성화

보안을 더욱 강화하기 위해, 루트 계정으로 SSH 로그인을 비활성화하는 것이 좋다. `sshd_config` 파일에서 다음 줄을 찾아 수정한다:

```plaintext
#PermitRootLogin yes
```

이 줄을 주석 해제하고 `no`로 변경한다:

```plaintext
PermitRootLogin no
```

이 설정은 루트 계정으로의 직접적인 로그인 시도를 막아, 보안 침해 가능성을 줄여준다. 변경 후 SSH 데몬을 다시 시작하여 설정을 적용한다:

```bash
sudo systemctl restart sshd
```

#### 기본 설정 최적화

SSH 서비스를 사용할 때 기본적으로 적용할 수 있는 몇 가지 보안 및 성능 최적화 방법이 있다. 첫째로, 연결을 유지하기 위한 `KeepAlive` 설정을 조정할 수 있다. 이 설정은 클라이언트가 일정 시간 동안 활동이 없을 때 연결을 끊지 않고 유지하는 데 사용된다.

```plaintext
ClientAliveInterval 60
ClientAliveCountMax 3
```

`ClientAliveInterval`은 서버가 클라이언트로 "생존 메시지"를 보내는 시간 간격(초)이며, `ClientAliveCountMax`는 클라이언트의 응답이 없을 때까지 서버가 허용하는 생존 메시지의 최대 수를 의미한다. 이 설정으로 인해, 서버는 클라이언트가 응답하지 않는 경우 180초 후 연결을 종료한다.

#### 방화벽 설정

OpenSSH 서비스가 실행 중이라도 방화벽에서 SSH 포트를 허용하지 않으면 외부에서 접속할 수 없다. `ufw`를 사용하는 시스템에서는 다음 명령으로 SSH 포트를 허용할 수 있다:

```bash
sudo ufw allow 22/tcp
```

만약 SSH 포트를 2222로 변경했다면, 다음과 같이 명령을 수정해야 한다:

```bash
sudo ufw allow 2222/tcp
```

방화벽 설정을 확인하고 적용한다:

```bash
sudo ufw status
sudo ufw enable
```

이와 같은 방식으로 기본적인 방화벽 설정을 적용하여 OpenSSH가 정상적으로 외부에서 접속 가능하도록 만든다.

#### 공개키 기반 인증 설정

보안성을 높이기 위해 비밀번호 인증 대신 공개키 기반 인증을 설정하는 것이 권장된다. 이를 위해, 먼저 클라이언트에서 SSH 키를 생성해야 한다. 키를 생성하는 방법은 다음과 같다:

```bash
ssh-keygen -t rsa -b 4096
```

이 명령어는 RSA 알고리즘을 사용하여 4096비트 길이의 SSH 키 쌍을 생성한다. 키를 저장할 위치와 비밀번호를 설정할 수 있으며, 비밀번호는 선택사항이다.

키가 생성되면, 공개키를 서버로 전송하여 인증에 사용할 수 있다. 일반적으로 다음 명령을 사용한다:

```bash
ssh-copy-id user@server_ip
```

이 명령은 클라이언트의 공개키를 서버의 `~/.ssh/authorized_keys` 파일에 추가한다. 이후부터는 비밀번호 대신 키를 사용해 로그인할 수 있다.

#### 비밀번호 인증 비활성화

공개키 기반 인증을 설정한 후에는 보안을 위해 비밀번호 인증을 비활성화하는 것이 좋다. `sshd_config` 파일에서 다음 줄을 찾아 수정한다:

```plaintext
#PasswordAuthentication yes
```

이 줄의 주석을 해제하고 `no`로 변경한다:

```plaintext
PasswordAuthentication no
```

이렇게 하면 서버는 더 이상 비밀번호로 로그인을 허용하지 않고, 공개키를 사용한 인증만 허용하게 된다. 설정을 적용하기 위해 SSH 데몬을 다시 시작해야 한다:

```bash
sudo systemctl restart sshd
```

#### 사용자별 접근 제어 설정

특정 사용자만 SSH 접속을 허용하거나 차단할 수 있다. 이를 위해 `sshd_config` 파일에서 `AllowUsers` 또는 `DenyUsers` 지시자를 사용할 수 있다. 예를 들어, 특정 사용자만 SSH 접속을 허용하려면 다음과 같이 설정한다:

```plaintext
AllowUsers user1 user2
```

반대로, 특정 사용자를 차단하려면 `DenyUsers` 지시자를 사용한다:

```plaintext
DenyUsers user3
```

이러한 방식으로 SSH 접근을 보다 세밀하게 제어할 수 있다.

#### SSH 데몬 테스트

모든 설정이 완료되면 SSH 데몬이 정상적으로 작동하는지 확인하는 것이 중요하다. 이를 위해 새로운 터미널을 열고 SSH를 통해 서버에 접속해 보십시오:

```bash
ssh user@server_ip -p 2222
```

위 명령에서 `-p` 옵션은 이전에 포트를 변경한 경우에만 필요하다. 만약 모든 설정이 올바르게 적용되었다면, 설정한 대로 인증이 진행되고 접속이 완료된다.

설정이 실패할 경우, SSH 데몬 로그 파일을 확인하여 문제를 파악할 수 있다:

```bash
sudo journalctl -u sshd
```

로그 파일을 분석하여 설정 오류를 수정한 후, SSH 데몬을 다시 시작하고 접속을 시도하라.

#### SSH 설정 변경 후 재시작

SSH 설정을 변경한 후에는 반드시 SSH 데몬을 다시 시작해야 변경 사항이 적용된다. 이를 위해 다음 명령을 사용한다:

```bash
sudo systemctl restart sshd
```

데몬이 성공적으로 재시작되면 변경된 설정이 적용된다. 만약 SSH 데몬이 다시 시작되지 않거나 오류가 발생하면, `/etc/ssh/sshd_config` 파일의 설정을 다시 확인해야 한다.

#### 접속 실패 대비

SSH 설정을 변경할 때, 특히 중요한 항목들을 수정할 때는 실수로 접속이 차단될 수 있는 위험을 대비해야 한다. 예를 들어, 잘못된 설정으로 인해 서버에 접속할 수 없게 될 경우를 대비하여 기존 세션을 종료하지 않고 새 터미널에서 접속을 시도하거나, 별도의 백업 접속 수단을 마련해 두는 것이 좋다.
