Server

SSH로 원격 터미널 접속 및 활용 하기

SSH(Secure Shell)는 단순한 원격 터미널 접속 도구를 넘어, 네트워크 보안 터널링, 원격 배치 자동화, 리모트 개발 환경 구축 등 다방면으로 활용되는 핵심 프로토콜입니다. 기본 접속 방식부터 실무에서 자주 활용되는 고급 기능까지 콘텐츠로 바로 활용할 수 있도록 정리했습니다.

· 2min read · 35 views
SSH로 원격 터미널 접속 및 활용 하기

핵심 요약

SSH(Secure Shell)는 단순한 원격 터미널 접속 도구를 넘어, 네트워크 보안 터널링, 원격 배치 자동화, 리모트 개발 환경 구축 등 다방면으로 활용되는 핵심 프로토콜입니다. 기본 접속 방식부터 실무에서 자주 활용되는 고급 기능까지 콘텐츠로 바로 활용할 수 있도록 정리했습니다.

 

1. 기본 접속 및 Key(pem) 기반 인증

기본 패스워드 접속

# 기본 포트(22번) 접속
ssh username@remote_host

# 포트 변경 시 (-p 옵션)
ssh -p 2222 username@remote_host

 

PEM(Private Key) 키를 이용한 접속

보안상 패스워드 인증을 비활성화하고 키 페어(Public/Private Key) 방식을 사용하는 것이 표준입니다.

Bash

# 1. 키 권한 설정 (소유자만 읽기/쓰기 가능해야 SSH 클라이언트가 허용)
chmod 400 my-key.pem

# 2. -i (identity_file) 옵션으로 키 지정 접속
ssh -i /path/to/my-key.pem username@remote_host

# 포트 지정과 함께 사용 시
ssh -i /path/to/my-key.pem -p 2222 username@remote_host

 

 

2. SSH 실무 고급 기능 모음

① SSH 포트 포워딩 (Port Forwarding & Tunneling)

방화벽이나 내부망(Private Subnet)에 갇힌 DB 및 웹 서비스를 로컬 PC에서 직접 다루듯이 연결하는 기능입니다.

  • 로컬 포트 포워딩 (-L): 원격 내부망의 서비스를 내 PC 포트로 매핑 (예: RDS/MySQL 접속)

    Bash

    # 로컬의 3307 포트로 접속하면, 원격 서버를 통해 원격지 내부망의 127.0.0.1:3306(MySQL)으로 터널링
    ssh -i key.pem -L 3307:127.0.0.1:3306 username@remote_host -N -f
    • -N: 쉘 명령을 실행하지 않음 (터널링 전용)
    • -f: 백그라운드로 실행

 

  • 원격 포트 포워딩 (-R): 내 로컬 PC의 개발 서버(예: localhost:3000)를 원격 서버의 특정 포트로 노출 (외부 웹훅 테스트 등에 활용)

    Bash

    # 원격 서버의 8080 포트로 들어오는 요청을 로컬 PC의 3000 포트로 포워딩
    ssh -R 8080:localhost:3000 username@remote_host -N

 

  • 동적 포트 포워딩 (-D, SOCKS5 프록시): 원격 서버를 내 PC의 프록시 게이트웨이로 활용

    Bash

    # 로컬 1080 포트를 SOCKS5 프록시로 열기
    ssh -D 1080 -q -C -N username@remote_host

 

② 쉘 접속 없이 원격 단일 명령 실행 (Remote Command Execution)

SSH 세션 안으로 들어가지 않고, 로컬 터미널에서 즉시 원격 명령을 실행하고 결과만 반환받습니다. CI/CD 배포 스크립트 작성 시 필수적인 방식입니다.

# 원격 서버 디스크 용량 확인
ssh -i key.pem username@remote_host "df -h"

# 원격 서비스 재시작
ssh -i key.pem username@remote_host "sudo systemctl restart nginx"

# 로컬 스크립트를 원격 서버에 파이프로 전달하여 즉시 실행 (파일 전송 없이 실행)
cat deploy_script.sh | ssh -i key.pem username@remote_host "bash -"

 

③ 점프 호스트(Bastion Host) 경유 접속 (-J)

외부에서 직접 접근 불가능한 내부 사설망(Private VPC) 인스턴스에 Bastion 서버를 거쳐 원클릭으로 접속합니다.

# bastion.example.com을 거쳐 내부 IP(10.0.1.50) 서버로 바로 접속
ssh -J [email protected]:22 [email protected]

# pem 키를 각각 지정해야 하는 경우 ProxyCommand 활용 또는 아래 ~/.ssh/config 사용 권장

 

④ SSH Config를 통한 접속 단순화 (~/.ssh/config)

매번 긴 IP, 포트, 키 경로를 입력하지 않고 짧은 별칭(Alias)으로 접속할 수 있습니다.

~/.ssh/config 파일에 설정:

# Bastion 서버
Host bastion
    HostName bastion.company.com
    User ubuntu
    IdentityFile ~/.ssh/bastion-key.pem

# 내부망 프로덕션 서버 (Bastion 경유)
Host prod-app
    HostName 10.0.2.15
    User ubuntu
    IdentityFile ~/.ssh/prod-key.pem
    ProxyJump bastion
    Port 22

 

사용 시:

# 복잡한 파라미터 없이 별칭만으로 바로 접속
ssh prod-app

 

⑤ 원격 파일 시스템 마운트 (SSHFS)

원격 서버의 특정 디렉토리를 로컬 PC의 탐색기/파인더에 외장 하드처럼 마운트하여 실시간으로 작업합니다.

# 로컬 마운트 디렉토리 생성
mkdir -p ~/remote_mount

# 원격 디렉토리 마운트
sshfs -o IdentityFile=~/.ssh/my-key.pem username@remote_host:/var/www/project ~/remote_mount

# 마운트 해제
umount ~/remote_mount       # Linux
umount ~/remote_mount       # macOS (또는 diskutil unmount)

 

⑥ 로컬 개발 도구와의 원격 연동 (VS Code Remote - SSH)

서버에 무거운 GUI를 설치하지 않고, 로컬의 VS Code UI 환경에서 원격 서버의 코드베이스를 직접 열어 편집, 디버깅, 터미널 작업을 수행합니다.

  • VS Code 확장 Remote - SSH 설치
  • ~/.ssh/config에 정의된 Host 선택 클릭
  • 원격 서버에 자동으로 경량 VS Code Server 데몬이 설치되어, 로컬 IDE 플러그인과 린터/언어 서버를 서버 리소스로 직접 구동

 

⑦ X11 포워딩 (원격 GUI 프로그램 실행)

CLI 서버에서 돌아가는 GUI 애플리케이션(브라우저, 그래픽 설정 툴 등)의 화면만 로컬 PC 창으로 띄울 때 사용합니다.

# -X 또는 신뢰된 접속 -Y 옵션
ssh -X -i key.pem username@remote_host xclock

(로컬에 XQuartz(macOS) 또는 X-Server(Windows)가 설치되어 있어야 합니다.)

 

 

3. 요약 및 실무 추천 조합

기능주요 목적추천 옵션/도구
Port Forwarding비공개 DB/내부 웹 콘솔 로컬 연결ssh -L, ssh -R
Direct ExecutionCI/CD 배포 스크립트 및 일회성 점검ssh user@host "command"
Jump HostAWS/GCP 사설망(Private VPC) 보안 접속ssh -J
SSH Config복잡한 접속 파라미터 추상화~/.ssh/config
Remote Edit서버 파일 로컬 에디터 작업SSHFS, VS Code Remote

Related Docs

Comments (0)

No comments yet. Be the first to comment!

Leave a Comment

로그인 후 댓글을 남길 수 있습니다.