그동안 제 블로그의 SSH 관련 글들을 사랑해 주셔서 감사합니다. 통계를 보니 많은 분이 SSH에 관심을 갖고 계시지만, 정작 "처음부터 어떻게 안전하게 구성해야 하는가?"에 대한 통합 가이드는 부족했던 것 같습니다.

SSH(Secure Shell)는 단순히 원격 접속 도구가 아닙니다. 개발자에게는 서버 관리의 생명줄이며, 일반 사용자에게는 언제 어디서나 내 컴퓨터에 접근할 수 있게 해주는 강력한 무기입니다.

오늘은 SSH의 기본 개념을 넘어, 실무자 관점에서 반드시 지켜야 할 보안 설정과 노하우를 담아 "제대로" 시작하는 법을 정리해 드립니다.


1. SSH란 무엇이며 왜 필수인가?



SSH는 Secure Shell의 약자로, 네트워크상의 다른 컴퓨터에 로그인하거나 명령을 실행하고 파일을 전송할 수 있게 해주는 프로토콜입니다. 핵심은 '암호화' 입니다. 기존의 Telnet과 달리 모든 통신 내용이 암호화되어 전송되므로, 누군가 중간에 데이터를 가로채더라도 내용을 알 수 없습니다.

  • 개발자: AWS, Azure 등 클라우드 서버 배포 및 관리에 필수입니다.

  • 비개발자: 외부에서 집에 있는 PC나 NAS, 라즈베리 파이 등을 안전하게 제어할 수 있습니다.

2. 서버(Remote) 설정: 보안을 위한 첫걸음

서버(원격지)에 openssh-server를 설치하는 것은 시작일 뿐입니다. 설치 직후 기본 설정으로 사용하는 것은 보안상 매우 취약합니다.

설정 파일의 위치는 리눅스 기준 /etc/ssh/sshd_config 입니다. 이 파일을 수정하여 최소한의 안전장치를 마련해야 합니다.

설정 파일 수정: sudo nano /etc/ssh/sshd_config

실전 설정 1: 기본 포트 변경 (Port Change)

SSH는 전 세계적으로 22번 포트를 씁니다. 해커들의 자동화된 봇은 22번 포트만 집중적으로 공격합니다. 포트 번호만 바꿔도 무차별 공격(Brute Force)의 90% 이상을 피할 수 있습니다.

# Port 22  <-- 주석 처리 또는 삭제
Port 22022  # 1024 이후의 임의의 포트 번호 사용 권장

실전 설정 2: 비밀번호 인증 차단 (Password Authentication No)

비밀번호는 언젠가 뚫립니다. 보안 수준이 훨씬 높은 SSH Key(키) 방식을 사용해야 하며, 키 설정이 완료된 후에는 비밀번호 접속을 아예 막아야 합니다.

PasswordAuthentication no

⚠️ 주의: 이 설정은 반드시 SSH 키 접속이 정상적으로 되는지 확인한 후에 적용해야 합니다. 그렇지 않으면 서버 접속이 완전히 차단될 수 있습니다.

3. 로컬(Client) 설정: 키(Key) 생성과 등록 노하우



이제 내 PC(로컬)에서 서버로 접속할 열쇠를 만들 차례입니다. 여기서부터는 숙련된 사용자의 노하우가 필요합니다.

노하우 1: 식별 가능한 키 생성 (-C 옵션)

키를 생성할 때 단순히 ssh-keygen만 치지 마세요. 나중에 키가 많아지면 어떤 키가 어디에 쓰이는지 구분하기 어렵습니다. 주석(Comment) 옵션을 반드시 사용하세요.

# -t ed25519: 최신 암호화 방식 (속도와 보안 우수)
# -C: 키 파일 끝에 주석을 달아 식별을 돕습니다.
ssh-keygen -t ed25519 -C "my-macbook-pro-home-server-key"

생성된 키는 ~/.ssh/ 디렉터리에 저장됩니다. (id_ed25519: 개인키, id_ed25519.pub: 공개키)

노하우 2: 가장 쉬운 키 복사 방법 (ssh-copy-id)

생성한 공개키(pub)를 서버에 등록해야 합니다. 텍스트를 복사해서 붙여넣는 번거로움 없이, 명령어 한 줄로 끝내세요.

# 문법: ssh-copy-id -i [공개키경로] [계정]@[서버주소] -p [포트]
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.1.100 -p 22022

# DNS도메인으로 연결된 서버라면 ip 입력대신 DNS 를 바로 넣어도 됩니다. 여러분의 공유기에 설정된 DNS 서버쪽에서 ip로 변환해주기 때문입니다. 
ssh-copy-id -i ~/.ssh/id_ed25519.pub alice@wonderland.com -p 22022

이 명령은 서버의 ~/.ssh/authorized_keys 파일에 내 공개키를 자동으로 추가해 줍니다.

노하우 3: 수동 등록 시 주의할 점 (권한 문제)

만약 ssh-copy-id를 사용할 수 없는 상황이라 수동으로 등록해야 한다면, 파일 권한(Permission) 에 주의해야 합니다. SSH는 권한이 너무 열려 있으면 보안상 이유로 접속을 거부합니다.

서버 접속 후 홈 디렉터리에서 다음을 확인하세요:

  1. .ssh 폴더: 권한 700 (나만 읽기/쓰기/실행)

  2. authorized_keys 파일: 권한 600 (나만 읽기/쓰기)

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

리눅스 파일시스템의 권한에 대해서 더 알고 싶으신 분은 여기 를 클릭해서 더 자세히 알아보세요!

4. 접속 테스트 및 다음 단계

모든 준비가 끝났다면 접속을 시도해 봅니다. 포트를 변경했으므로 -p 옵션을 사용해야 합니다.

ssh -p 22022 user@192.168.1.100
# LAN IP이든, WAN IP이든, DNS도메인이든 상관없습니다. 서버를 명확히 가르키고 있으면 됩니다.

비밀번호를 묻지 않고 바로 접속된다면 성공입니다. 이제 서버의 sshd_config에서 PasswordAuthentication no를 설정하여 보안을 완성하세요.


ssh를 이용하여 서버에 연결하는 이미지

이제 여러분은 안전하게 서버를 제어할 수 있는 환경을 갖추었습니다. 하지만 SSH의 세계는 넓습니다. 접속을 자동화하고, 파일을 관리하며, 더 강력한 보안 도구를 연동하는 방법들을 아래 글에서 이어서 학습해 보세요.

📖 함께 읽으면 좋은 심화 가이드

  1. SSH 사용법: 명령어 작성부터 유용한 옵션까지 완전 정복!

  2. SSH 접속 자동화의 첫걸음: config 파일 마스터하기

  3. SSH 리버스 포트 포워딩: 외부에서 내부로 접속하는 마법 (feat. -R 옵션)

  4. SSH keygen: 초보자를 위한 완벽 가이드

  5. 터미널 없이 SSH로 서버 파일 관리하기: SFTP와 GUI 파일 탐색기 활용!

  6. Linux 서버를 지키는 수호자, Fail2Ban


다음 포스트에서는 많은 분이 헷갈려 하시는 SSH Config 파일을 이용해, 복잡한 옵션 없이 단어 하나로 서버에 접속하는 방법은 매우 유용하며 위 2번글에 다루어져 있습니다. 그외에도 도움이 되셨다면 다른 글들도 참고해 주세요!