콘텐츠로 이동

SSH 구성 파일 상세 설명 및 옵션 치트 시트

적용 범위와 판정 기준

이 치트 시트는 OpenSSH 서버 설정 예시입니다. 클라이언트용 ssh_config 옵션과 서버용 sshd_config 옵션은 서로 바꿔 쓸 수 없고, 허용되는 Match 키워드와 폐기된 지시어는 OpenSSH 버전에 따라 달라집니다.

  • 사전 확인: sshd -V 또는 패키지 정보, 포함 파일, 서비스 이름, 실제 리슨 주소와 포트, 기존 관리 경로를 기록합니다.
  • 평가 규칙: OpenSSH는 많은 옵션에서 처음 결정된 값을 사용하므로 Match 블록의 순서와 Match all로 전역 문맥을 복원했는지 확인합니다.
  • 검증 명령: 변경 전후에 sudo sshd -t로 구문을 검사하고, sudo sshd -T -C user=USER,addr=CLIENT_IP,laddr=SERVER_IP,lport=PORT로 대표 조건의 유효 값을 비교합니다.
  • 안전한 적용: 기존 관리자 세션을 유지한 채 reload를 사용하고 두 번째 세션에서 인증, 셸 또는 SFTP, 포워딩 거부 조건을 시험합니다. 실패하면 백업 설정으로 되돌린 뒤 다시 검사합니다.
  • 완료 조건: 의도한 사용자와 주소 조합별 유효 설정, 성공 및 거부 로그, chroot 경로의 소유권과 쓰기 가능 하위 경로를 증거로 남깁니다.

ChrootDirectory 자체와 모든 상위 경로는 일반적으로 root 소유이며 대상 사용자가 쓸 수 없어야 합니다. 업로드가 필요하면 chroot 아래에 별도의 사용자 소유 디렉토리를 둡니다. X11, 에이전트, TCP 포워딩은 필요한 경우에만 최소 범위로 허용합니다.

구성 파일 섹션별 의미 설명

Subsystem sftp internal-sftp

이 설정은 SFTP 서브시스템을 정의합니다. internal-sftp는 외부 바이너리 대신 SSH 데몬(sshd) 내부에 내장된 SFTP 서버를 사용하도록 지시합니다. 이 방식은 별도의 프로세스를 실행할 필요가 없어 성능상 이점이 있습니다[1][6].

Match LocalPort 22 / ForceCommand none

이 블록은 포트 22(표준 SSH 포트)로 들어오는 연결에 적용됩니다. ForceCommand none은 특정 명령어를 강제하지 않도록 설정하여 일반적인 SSH 셸 접근을 허용합니다. 이는 이전 설정에서 발생했던 문제를 해결하는 중요한 설정입니다[2].

Match User nodove LocalPort 22

이 블록은 포트 22를 통해 접속하는 'nodove' 사용자에게 특정 설정을 적용합니다: - X11Forwarding yes: X11 그래픽 애플리케이션 포워딩을 허용합니다[3][4] - PubKeyAuthentication yes: 공개키 인증 방식을 허용합니다 - AllowTcpForwarding yes: TCP 포트 포워딩을 허용합니다[4] - PermitTTY yes: 터미널 할당을 허용합니다[3]

Match LocalPort 2723

이 블록은 포트 2723으로 들어오는 모든 연결에 적용됩니다: - ForceCommand internal-sftp: 모든 접속을 SFTP 프로토콜로 강제합니다[5][6] - ChrootDirectory /workspace: 사용자를 제한하는 예시입니다. 경로와 상위 경로는 root 소유이며 사용자가 쓸 수 없어야 하고, 쓰기 작업은 별도 하위 경로에 허용합니다[1][5] - AllowTcpForwarding no: 보안을 위해 TCP 포워딩을 비활성화합니다[5] - X11Forwarding no: 보안을 위해 X11 포워딩을 비활성화합니다[5]

SSH 구성 옵션 치트 시트

기본 설정 옵션

옵션 설명
Port SSH 데몬이 리스닝할 포트 번호 (기본값: 22)
ListenAddress SSH 데몬이 리스닝할 IP 주소
Protocol 사용할 SSH 프로토콜 버전 (2 권장)
HostKey 호스트 키 파일 경로
ServerKeyBits SSH protocol 1용 폐기 옵션이며 현대 OpenSSH에서는 사용하지 않음
LoginGraceTime 로그인 유예 시간(초)
PermitRootLogin root 계정 로그인 허용 여부 (yes/no/prohibit-password)
StrictModes 사용자 파일 권한 검사 여부
MaxAuthTries 최대 인증 시도 횟수
MaxSessions 최대 세션 수

인증 옵션

옵션 설명
PubkeyAuthentication 공개키 인증 허용 여부
PasswordAuthentication 비밀번호 인증 허용 여부
PermitEmptyPasswords 빈 비밀번호 허용 여부
AuthorizedKeysFile 인증된 키 파일 경로 (.ssh/authorized_keys)
ChallengeResponseAuthentication 챌린지-응답 인증 허용 여부
UsePAM PAM 인증 사용 여부
KerberosAuthentication 커버로스 인증 허용 여부
GSSAPIAuthentication GSSAPI 인증 허용 여부

접근 제어 옵션

옵션 설명
AllowUsers 접속 허용할 사용자 목록
AllowGroups 접속 허용할 그룹 목록
DenyUsers 접속 거부할 사용자 목록
DenyGroups 접속 거부할 그룹 목록
Match 특정 조건(사용자, 그룹, 호스트, 포트 등)에 대한 설정 블록 정의

포워딩 옵션

옵션 설명
AllowTcpForwarding TCP 포트 포워딩 허용 여부
GatewayPorts 원격 호스트가 포워딩된 포트에 연결 허용 여부
X11Forwarding X11 그래픽 애플리케이션 포워딩 허용 여부
X11DisplayOffset X11 디스플레이 번호 오프셋
X11UseLocalhost X11 포워딩을 localhost로 제한 여부
PermitTunnel 터널링 허용 여부

세션 옵션

옵션 설명
Banner 로그인 전 표시할 배너 파일 경로
PrintMotd 로그인 시 motd(message of the day) 표시 여부
PrintLastLog 마지막 로그인 정보 표시 여부
PermitTTY TTY 할당 허용 여부
PermitUserEnvironment 사용자 환경 변수 허용 여부
ClientAliveInterval 클라이언트 활성 확인 간격(초)
ClientAliveCountMax 클라이언트 응답 없을 시 최대 메시지 전송 횟수
TCPKeepAlive TCP KeepAlive 메시지 전송 여부

SFTP 옵션

옵션 설명
Subsystem sftp SFTP 서브시스템 정의 (external 또는 internal-sftp)
ForceCommand 모든 SSH 세션에서 강제로 실행할 명령어
ChrootDirectory 사용자를 제한할 디렉토리(jail)
AllowAgentForwarding SSH 에이전트 포워딩 허용 여부

보안 옵션

옵션 설명
IgnoreRhosts .rhosts 파일 무시 여부
IgnoreUserKnownHosts 사용자 known_hosts 파일 무시 여부
PermitUserRC 사용자 RC 파일 실행 허용 여부
Ciphers 허용할 암호화 알고리즘 목록
MACs 허용할 메시지 인증 코드 알고리즘 목록
KexAlgorithms 허용할 키 교환 알고리즘 목록
LogLevel 로그 레벨 (INFO, VERBOSE, DEBUG 등)
SyslogFacility 시스템 로그 시설 코드 (AUTH 등)

이 구성으로 포트 22는 SSH 접속용, 포트 2723은 SFTP 전용으로 설정되어 있어 각각의 프로토콜을 분리하여 관리할 수 있습니다.