정지용
기술스택 목록
DevOps

SSH

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

네트워크를 통해 원격 서버에 안전하게 접속하고 명령을 실행하는 암호화 프로토콜

SSH(Secure Shell)는 신뢰할 수 없는 네트워크 환경에서도 서버에 안전하게 접속할 수 있도록 설계된 암호화 통신 프로토콜입니다. 과거 telnet이나 rsh처럼 데이터를 평문으로 주고받던 방식은 계정 정보와 명령 내용이 그대로 노출되는 문제가 있었는데, SSH는 통신 구간 전체를 암호화하고 서버·클라이언트 상호 인증 절차를 두어 이를 해결합니다. 원격 셸 접속뿐 아니라 파일 전송, 포트 포워딩, 배포 자동화 등 다양한 용도로 확장되어 사용됩니다.

이럴 때 사용합니다

  • 비밀번호 노출 위험 없이 원격 서버에 로그인하거나 명령을 실행해야 할 때
  • CI/CD 파이프라인에서 배포 서버에 자동으로 접속해 스크립트를 실행해야 할 때
  • 파일을 암호화된 채널로 안전하게 전송(scp, rsync, sftp)해야 할 때
  • 방화벽 안쪽에 있는 서비스에 안전하게 우회 접근해야 할 때

핵심 개념

public key authentication
비밀번호 대신 개인키·공개키 쌍을 이용해 접속자를 인증하는 방식으로, 개인키는 클라이언트가 보관하고 공개키만 서버에 등록해 둔다.
known_hosts
클라이언트가 이전에 접속했던 서버의 공개키 지문을 기록해 두는 파일로, 이후 접속 시 서버가 위·변조되지 않았는지 확인하는 데 사용된다.
SSH agent
개인키를 메모리에 올려두고 필요할 때마다 서명을 대신 처리해 주는 프로세스로, 매번 비밀문구를 입력하지 않고도 여러 세션·명령에서 인증을 재사용할 수 있게 해준다.
port forwarding (tunneling)
SSH 연결 위에 다른 네트워크 트래픽을 실어 보내는 기능으로, 방화벽 뒤의 서비스에 우회 접근하거나 통신을 암호화할 때 활용된다.
sshd / authorized_keys
서버 측에서 접속 요청을 받아주는 데몬이 sshd이며, authorized_keys 파일에 등록된 공개키와 일치하는 클라이언트만 접속을 허용한다.

공개키 인증으로 원격 서버 접속하기

키 쌍을 생성해 공개키는 서버에 등록하고, 개인키로 인증하여 배포 명령을 원격 실행하는 기본 흐름을 보여줍니다.

Shell
# 1. 클라이언트에서 키 쌍 생성 (개인키/공개키)
ssh-keygen -t ed25519 -C "deploy@ci"

# 2. 공개키를 서버의 authorized_keys에 등록
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote-host

# 3. 개인키로 서버 접속 (비밀번호 없이 인증)
ssh -i ~/.ssh/id_ed25519 user@remote-host

# 4. 접속 후 배포 명령 실행 예시
ssh -i ~/.ssh/id_ed25519 user@remote-host 'cd /app && git pull && systemctl restart app'

처음 쓸 때 흔한 함정

  • 개인키 파일 권한이 너무 열려 있으면(예: 644) SSH가 접속을 거부한다
  • known_hosts 검증을 무시하고 접속하면 중간자 공격에 노출될 수 있다
  • 개인키를 저장소나 배포 스크립트에 평문으로 커밋해 노출시키는 실수가 흔하다

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.