개요
SSH(Secure Shell)는 원격 리눅스 서버 관리에 필수적인 표준 네트워크 프로토콜입니다. 본 글에서는 우분투 환경에서 OpenSSH 서버 구축부터 비밀번호 없는 공개키 인증, 실무 네트워크 연결을 위한 SSH 포트 포워딩 및 필수 보안 강화 팁까지 단계별로 알아봅니다.
1. OpenSSH 서버 설치 및 서비스 활성화
우분투 시스템에서 원격 접속 서비스를 제공하기 위해 최신 패키지 목록을 갱신하고 openssh-server 패키지를 설치합니다.

설치한 SSH 서비스를 부팅 시 자동으로 시작하도록 활성화하고 즉시 실행하기 위해 systemctl enable --now ssh 명령어를 실행합니다.

SSH 서비스 데몬(sshd)이 현재 활성 상태(active (running))로 정상 구동 중인지 확인합니다.

SSH 기본 포트인 22번 포트에서 수신 대기(LISTEN) 상태로 네트워크 연결을 대기하고 있는지 확인하기 위해 ss -tulpn | grep :22 명령어를 실행합니다.

2. 비밀번호 없는 접속을 위한 SSH 키 쌍 생성 및 등록
SSH 키 파일들을 안전하게 보관할 ~/.ssh 디렉터리를 생성하고 소유자만 접근할 수 있도록 권한을 700으로 설정합니다.

보안성과 성능이 뛰어난 Ed25519 알고리즘 기반의 키 쌍이 없을 경우 새로 생성하기 위해 test -f ~/.ssh/id_ed25519 || ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519 명령어를 실행합니다.
명령어 실행 결과 개인키(id_ed25519)와 공개키(id_ed25519.pub)가 정상적으로 생성된 것을 확인할 수 있습니다.

생성된 공개키 내용을 인증 허용 목록 파일인 ~/.ssh/authorized_keys에 추가 등록합니다.

인증 키 목록 파일의 보안을 유지하고 SSH 데몬의 엄격한 권한 검사를 통과하기 위해 authorized_keys 파일 권한을 600으로 제한합니다.

생성한 Ed25519 개인키를 지정하여 로컬 루프백(127.0.0.1) 주소로 접속을 시도하고 키 기반 인증이 정상적으로 동작하는지 검증합니다.
명령어 실행 결과 비밀번호 입력 없이 로컬 키 인증 접속에 성공한 메시지가 출력됩니다.

3. 실무 네트워크 터널링: SSH 포트 포워딩 실습
웹 서버 구동 및 HTTP 요청 테스트를 진행하기 위해 최신 패키지 목록을 갱신하고 curl과 python3 패키지를 설치합니다.

포트 포워딩 테스트에 사용할 웹 문서 디렉터리를 생성하고 테스트용 HTML 파일을 작성하기 위해 mkdir -p /tmp/webroot && echo '<h1>SSH Tunnel Test OK</h1>' > /tmp/webroot/index.html 명령어를 실행합니다.

내부 서비스 역할을 수행할 간이 웹 서버를 8080번 포트에서 백그라운드로 실행하기 위해 python3 -m http.server 8080 --directory /tmp/webroot >/dev/null 2>&1 & 명령어를 실행합니다.

로컬의 9090번 포트로 들어오는 요청을 SSH 보안 터널을 통해 대상 서버의 8080번 포트로 전달하도록 로컬 포트 포워딩을 백그라운드에서 실행합니다.
명령어 실행 후 터미널 세션을 차지하지 않고 백그라운드에서 안전하게 포트 포워딩 터널이 생성됩니다.

SSH 터널로 포워딩된 로컬 9090번 포트로 HTTP 요청을 전송하여 내부 웹 서버로의 연결이 정상적으로 중계되는지 검증합니다.
명령어 실행 결과 내부 8080번 웹 서버의 응답 내용인 <h1>SSH Tunnel Test OK</h1>가 출력되어 포트 포워딩이 완벽히 작동함을 확인할 수 있습니다.

포트 포워딩 테스트가 완료된 후 백그라운드에서 동작 중이던 테스트용 웹 서버 프로세스를 안전하게 종료하기 위해 pkill -f 'http.server 8080' 명령어를 실행합니다.

4. 실무 SSH 서버 보안 강화 설정 (sshd_config)
설정 변경 중 발생할 수 있는 만약의 사태에 대비하고 원본 설정을 보존하기 위해 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak 명령어로 설정 파일을 백업합니다.

보안 강화를 위해 루트 계정의 직접적인 원격 로그인을 전면 차단하도록 sudo sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config 명령어를 실행하여 설정값을 변경합니다.

수정한 SSH 서버 설정 파일에 문법적 오류나 오타가 없는지 사전에 안전하게 검증하기 위해 sudo sshd -t 명령어를 실행합니다.
명령어 실행 후 아무런 에러 메시지가 출력되지 않아 설정 구문에 문제가 없음을 확인합니다.

설정 파일에 루트 로그인 차단 옵션(PermitRootLogin no)이 올바르게 반영되었는지 확인하기 위해 grep -E '^(PermitRootLogin|PasswordAuthentication)' /etc/ssh/sshd_config || echo '설정 검증 완료' 명령어를 실행합니다.
명령어 실행 결과 PermitRootLogin no가 정상적으로 검색되어 보안 설정이 완벽히 적용되었음을 확인합니다.

지금까지 우분투 환경에서 SSH 기본 접속부터 포트 포워딩, 필수 보안 설정까지 실무에 필요한 핵심 내용을 정리해보았습니다.
알려드린 보안 수칙들을 차근차근 적용하셔서 더욱 안전하고 효율적인 서버 관리 환경을 구축해 보시기 바랍니다.