그동안 제 블로그의 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는 권한이 너무 열려 있으면 보안상 이유로 접속을 거부합니다.
서버 접속 후 홈 디렉터리에서 다음을 확인하세요:
-
.ssh폴더: 권한700(나만 읽기/쓰기/실행) -
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 Config 파일을 이용해, 복잡한 옵션 없이 단어 하나로 서버에 접속하는 방법은 매우 유용하며 위 2번글에 다루어져 있습니다. 그외에도 도움이 되셨다면 다른 글들도 참고해 주세요!
댓글이 없습니다.