SSH 마스터하기: 필수 명령줄 가이드
로그인, 키, 파일 전송, 포트 포워딩 및 재사용 가능한 호스트 구성을 위한 실용적인 SSH 명령어를 배웁니다.
SSH 마스터하기: 필수 커맨드라인 가이드
Secure Shell(SSH) 프로토콜은 원격 시스템에 암호화된 방식으로 로그인하고, 명령을 실행하며, 파일을 이동할 수 있게 해줍니다. 서버를 관리한다면 몇 가지 SSH 커맨드라인 습관이 작업을 더 빠르고 안전하게 만들어 줍니다.
이 가이드에서는 가장 많이 사용하게 될 명령어인 원격 로그인, 키 인증, scp, sftp, 로컬 포트 포워딩, 그리고 ~/.ssh/config 별칭을 다룹니다.
보안 원격 로그인 설정
SSH의 가장 빈번한 사용은 원격 서버에 터미널 연결을 보호하는 것입니다. 기본 구문은 간단하지만, 보안과 사용성을 높이기 위한 중요한 옵션들이 있습니다.
기본 연결 구문
표준 명령어는 원격 사용자와 호스트 주소(IP 또는 도메인 이름)를 지정해야 합니다:
ssh [user]@[host]
# 예시:
ssh [email protected]
비표준 포트 지정
보안상의 이유로 많은 관리자가 기본 SSH 포트(포트 22)를 변경합니다. -p 플래그를 사용하여 다른 포트 번호를 지정하세요:
ssh -p 2222 [email protected]
단일 원격 명령 실행
SSH는 대화형 셸을 여는 것에 국한되지 않습니다. 원격 서버에서 단일 명령을 실행하고 출력을 로컬로 반환받을 수 있으며, 이는 스크립팅 및 빠른 확인에 매우 유용합니다.
# 원격 서버의 /var/log 디렉토리에서 'ls -l' 실행
ssh user@host 'ls -l /var/log'
# 서버의 가동 시간 확인
ssh user@host uptime
SSH 키를 사용한 인증 관리
비밀번호 인증은 종종 무차별 대입 공격에 노출됩니다. SSH 키는 사용자 머신의 개인 키와 원격 서버의 공개 키를 사용하므로, 서버가 비밀번호를 받지 않고도 사용자를 확인할 수 있습니다.
키 쌍 생성
아직 키 쌍이 없다면 ssh-keygen을 사용하여 생성할 수 있습니다. 개인 키를 보호하기 위해 강력한 암호를 사용하는 것이 좋습니다.
ssh-keygen -t ed25519 -C "[email protected]"
RSA 키는 특히 오래된 시스템에서 여전히 일반적입니다. 최신 OpenSSH 설정에서 새 키를 생성할 때는 Ed25519가 일반적으로 더 간단한 기본 선택입니다.
공개 키를 서버에 복사하기
ssh-copy-id 유틸리티는 로컬 공개 키를 원격 사용자의 ~/.ssh/authorized_keys 파일에 설치하는 가장 간단한 방법입니다. 일반적으로 비밀번호를 한 번 입력하면 이후 로그인 시 키를 사용할 수 있습니다.
# 기본 공개 키를 서버에 복사하고 일반적인 권한 설정
ssh-copy-id user@host
팁: 개인 키 사용하기 개인 키가 기본 위치(
~/.ssh/id_rsa)에 없으면 연결 시-i플래그를 사용하여 경로를 지정해야 합니다:ssh -i ~/.ssh/my_custom_key user@host
안전한 파일 전송
SSH는 안전한 파일 전송을 위한 두 가지 주요 도구인 scp(Secure Copy)와 sftp(Secure File Transfer Protocol)를 제공합니다.
A. Secure Copy(scp) 사용하기
scp는 간단하고 빠른 일회성 파일 전송에 이상적이며, 표준 Unix cp(복사) 명령어를 모델로 한 커맨드라인 인터페이스를 제공합니다.
로컬에서 원격으로 파일 전송
# 구문: scp [로컬_파일] [사용자]@[호스트]:/[원격_경로]
scp deployment.tar.gz user@webserver:/var/www/uploads/
원격에서 로컬로 파일 전송
# 구문: scp [사용자]@[호스트]:/[원격_파일] [로컬_경로]
scp user@dbserver:/var/log/backup.sql .
디렉토리 재귀적으로 복사하기
-r 플래그를 사용하여 전체 디렉토리 구조를 복사하세요.
scp -r ~/project_files/ user@buildserver:/home/user/builds/
B. Secure File Transfer Protocol(sftp) 사용하기
sftp는 전통적인 FTP 클라이언트와 유사하지만 SSH를 통해 보안이 유지되는 대화형 세션을 설정합니다. 원격 디렉토리 탐색, 파일 목록 확인 및 단일 세션 내에서 여러 전송을 수행하는 데 더 적합합니다.
sftp 세션 시작하기
sftp user@host
일반적인 sftp 세션 명령어
| 명령어 | 설명 |
|---|---|
ls |
원격 파일 목록 표시 |
lls |
로컬 파일 목록 표시 |
get filename |
원격 서버에서 파일 다운로드 |
put filename |
원격 서버에 파일 업로드 |
cd /path/ |
원격 디렉토리 변경 |
lcd /path/ |
로컬 디렉토리 변경 |
quit |
sftp 세션 종료 |
로컬 포트 포워딩을 통한 SSH 터널링
SSH 터널링 또는 포트 포워딩을 사용하면 비보안 프로토콜에 대한 연결을 암호화하거나 점프 호스트를 통해 내부 네트워크의 서비스에 액세스할 수 있습니다. 가장 일반적인 형태는 로컬 포트 포워딩입니다.
로컬 포트 포워딩(-L)
로컬 포워딩은 로컬 머신의 포트에서 SSH 서버를 통해 원격 호스트의 지정된 포트로 트래픽을 라우팅합니다. 이는 공개 인터넷에 직접 노출되지 않은 내부 데이터베이스, 웹 인터페이스 또는 독점 서비스에 액세스하는 데 유용합니다.
시나리오: jumpbox에서만 액세스할 수 있는 개인 내부 웹 서버(포트 80)에 액세스하려고 합니다.
# 구문: ssh -L [로컬_포트]:[대상_호스트]:[대상_포트] [사용자]@[점프박스]
ssh -L 8080:internal-web.lan:80 user@jumpbox -N
-L 8080:internal-web.lan:80: 로컬 머신의 포트 8080에 도착하는 트래픽이jumpbox를 통해internal-web.lan의 포트 80으로 전달됩니다.-N: SSH가 원격 명령을 실행하지 않도록 지시합니다. 단순히 터널을 설정합니다.
연결이 설정되면 로컬 브라우저에서 http://localhost:8080으로 이동하여 내부 사이트에 액세스할 수 있습니다.
SSH 구성 파일로 효율성 향상
사용자 정의 포트, 사용자 이름 및 키 경로를 포함한 복잡한 SSH 명령어를 수동으로 입력하는 것은 비효율적입니다. SSH 구성 파일(~/.ssh/config)을 사용하면 자주 액세스하는 서버에 대한 별칭과 설정을 정의할 수 있습니다.
예시 구성 (~/.ssh/config)
~/.ssh/config 파일을 생성하거나 편집하여 다음 구조로 작성하세요:
# 서버 1: 표준 키, 비표준 포트
Host dev-web
HostName 10.0.0.50
User deployment_user
Port 2222
IdentityFile ~/.ssh/id_rsa_dev
# 서버 2: 키 인증이 필요한 점프박스 액세스
Host production-db
HostName 10.0.20.15
User sysadmin
IdentityFile ~/.ssh/prod_key
LocalForward 54320 127.0.0.1:5432
두 번째 예시에서 ssh production-db는 워크스테이션에서 로컬 포트를 엽니다. 그런 다음 PostgreSQL 클라이언트를 localhost:54320으로 지정하면 SSH가 원격 호스트에서 보이는 127.0.0.1:5432로 트래픽을 전달합니다.
별칭으로 연결하기
구성이 완료되면 연결이 훨씬 간단해집니다:
# deployment_user로 10.0.0.50의 포트 2222에 연결
ssh dev-web
# 연결 및 자동 포트 포워딩 설정(구성된 경우)
ssh production-db
핵심 요점
ssh user@host로 시작하고, 키 기반 인증을 추가한 다음, 반복되는 옵션을 ~/.ssh/config로 옮기세요. 이러한 기본 사항이 확실해지면 ssh -L을 사용한 로컬 포워딩을 통해 개인 서비스를 네트워크에 직접 노출하지 않고도 제어된 방식으로 액세스할 수 있습니다.