우분투 SSH 완벽 실습 가이드: 원격 접속부터 키 기반 무암호 로그인, 포트 포워딩까지 한 번에 끝내기

개요

리눅스 서버 관리와 원격 작업의 필수 도구인 SSH(Secure Shell)의 기본 개념과 핵심 활용법을 다룹니다. 클라이언트 패키지 설치부터 기본 원격 접속, 안전한 SSH 키 쌍 생성 및 무암호 인증 설정, 실무에서 유용한 SSH config 프로파일 및 포트 포워딩 기법까지 단계별 터미널 실습 명령어로 알기 쉽게 안내합니다.

1. SSH 클라이언트 확인 및 기본 원격 접속

SSH 원격 접속 실습 진행을 위해 openssh-client 패키지를 설치하고 최신 상태로 업데이트합니다.

apt-get update -qq && apt-get install -y openssh-client

ssh -V 명령어는 시스템에 설치된 OpenSSH 클라이언트의 버전 정보를 확인합니다.
⚙️ [주요 옵션]

-p : 기본 22번 포트 대신 원격 서버가 사용하는 특정 포트 번호를 지정합니다.
-i : 비밀번호 대신 접속 인증에 사용할 개인 키(Private Key) 파일 경로를 지정합니다.
-v : 디버그 메시지를 출력하여 접속 과정과 문제 발생 원인을 상세히 확인합니다.
-C : 데이터 전송 시 압축을 활성화하여 네트워크 대역폭을 절약합니다.
-o : 설정 파일(~/.ssh/config)에 정의하는 옵션(예: ConnectTimeout)을 명령줄에서 직접 지정합니다.
-L : 로컬 포트 포워딩을 설정하여 원격 네트워크 서비스로 트래픽을 전달합니다.
-R : 원격 포트 포워딩을 설정하여 원격 서버에서 로컬 서비스로 접근할 수 있게 합니다.

ssh -V

ssh -p 22 -o ConnectTimeout=5 testuser@127.0.0.1 명령어는 22번 포트와 5초의 접속 타임아웃을 설정하여 지정한 원격 호스트로 접속을 시도합니다.
연결 지연 시 무한 대기를 방지하고 신속하게 접속 상태를 확인할 수 있습니다.

ssh -p 22 -o ConnectTimeout=5 testuser@127.0.0.1 || true

2. SSH 키 쌍(Key Pair) 생성 및 안전한 권한 설정

SSH 키 파일들을 안전하게 보관할 디렉터리를 준비하고 소유자만 접근할 수 있도록 mkdir -p ~/.ssh && chmod 700 ~/.ssh 명령어로 권한을 제한합니다.

mkdir -p ~/.ssh && chmod 700 ~/.ssh

ssh-keygen -t ed25519 -C 'lab-demo@ubuntu' -f ~/.ssh/id_ed25519 -N '' 명령어는 최신 암호화 표준인 Ed25519 알고리즘을 사용하여 비밀번호 입력 없이 동작하는 새로운 SSH 키 쌍을 생성합니다.
명령어 실행 결과로 개인 키(id_ed25519)와 공개 키(id_ed25519.pub), 고유 키 핑거프린트가 정상적으로 생성되었음을 확인할 수 있습니다.

ssh-keygen -t ed25519 -C ’lab-demo@ubuntu’ -f ~/.ssh/id_ed25519 -N ‘’

SSH 데몬의 엄격한 보안 요구사항을 충족하기 위해 chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub 명령어로 개인 키는 소유자만 읽고 쓸 수 있도록, 공개 키는 누구나 읽을 수 있도록 파일 권한을 설정합니다.

chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub

ls -la ~/.ssh 명령어는 디렉터리 내 생성된 파일 목록과 적용된 보안 권한 상태를 상세하게 확인합니다.
출력 결과를 통해 .ssh 디렉터리는 drwx------(700), 개인 키는 -rw-------(600), 공개 키는 -rw-r--r--(644)로 의도한 권한이 올바르게 반영되었음을 검증할 수 있습니다.

ls -la ~/.ssh

3. 무암호 로그인을 위한 공개키 등록 (ssh-copy-id)

원격 접속 시 사용할 공개키를 보관할 파일을 생성하고 소유자만 읽고 쓸 수 있도록 touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys 명령어로 접근 권한을 설정합니다.

touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys

생성해 둔 공개키의 내용을 인증 허용 목록에 추가하기 위해 cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys 명령어를 실행합니다.

cat ~/.ssh/id_ed25519.pub » ~/.ssh/authorized_keys

ssh-keygen -l -f ~/.ssh/authorized_keys 명령어는 등록된 인증 키 파일의 핑거프린트 정보를 조회하여 공개키가 정상적으로 반영되었는지 검증합니다.
출력 결과를 통해 256비트 Ed25519 공개키와 등록 당시 지정했던 주석 정보(lab-demo@ubuntu)가 올바르게 등록되어 있음을 확인할 수 있습니다.

ssh-keygen -l -f ~/.ssh/authorized_keys

4. SSH Config 설정 파일로 복잡한 접속 명령 간소화

긴 접속 정보 대신 별칭으로 간편하게 접속할 수 있도록 ~/.ssh/config 파일에 원격 호스트의 IP 주소, 사용자명, 포트 번호, 인증 키 경로를 정의합니다.

cat « ‘EOF’ > ~/.ssh/config
Host dev-server
HostName 127.0.0.1
User testuser
Port 22
IdentityFile ~/.ssh/id_ed25519
EOF

SSH 클라이언트가 보안상 안전하지 않은 설정 파일을 거부하는 문제를 방지하기 위해 chmod 600 ~/.ssh/config 명령어로 소유자만 읽고 쓸 수 있도록 파일 권한을 설정합니다.

chmod 600 ~/.ssh/config

cat ~/.ssh/config 명령어는 작성된 SSH 클라이언트 설정 파일의 내용을 출력하여 구성 상태를 확인합니다.
출력 결과를 통해 dev-server 별칭에 대한 호스트명, 사용자 계정, 포트, 인증용 개인 키 정보가 의도한 대로 올바르게 저장되었음을 확인할 수 있습니다.

cat ~/.ssh/config

5. 원격 작업 생산성을 높이는 SSH 단발 명령 실행 및 터널링

ssh -V 명령어는 현재 시스템에 설치된 OpenSSH 클라이언트의 버전 정보를 확인합니다.

ssh -V

ssh -o BatchMode=yes -o ConnectTimeout=2 testuser@127.0.0.1 'uname -a; df -h' || true 명령어는 원격 대화형 셸에 접속하지 않고 원격 호스트에서 시스템 정보 확인 및 디스크 사용량 조회 명령어를 직접 실행한 뒤 결과를 반환받습니다.
비밀번호 입력 대기 없이 즉시 실행하도록 설정하여 자동화 스크립트나 배치 작업에서 안전하게 단발 명령을 수행할 수 있습니다.

ssh -o BatchMode=yes -o ConnectTimeout=2 testuser@127.0.0.1 ‘uname -a; df -h’ || true

ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 testuser@127.0.0.1 || true 명령어는 원격 명령 실행 없이 백그라운드로 안전한 암호화 터널을 생성하여 로컬 시스템의 8080번 포트를 원격 서버의 80번 포트로 연결하는 로컬 포트 포워딩을 수행합니다.
이를 통해 외부에서 직접 접근할 수 없는 원격 내부 웹 서비스나 데이터베이스에 로컬 포트를 경유하여 안전하게 접근할 수 있습니다.

ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 testuser@127.0.0.1 || true

지금까지 우분투 환경에서 SSH 기본 원격 접속부터 보안을 높이는 키 기반 무암호 로그인, 그리고 유용한 포트 포워딩 활용법까지 단계별로 살펴보았습니다.
직접 실습해보며 익힌 SSH 기술을 바탕으로 앞으로 더욱 안전하고 편리한 원격 서버 관리 환경을 구축해보시기 바랍니다.