SSH 개요
SSH는 클라이언트-서버 모델로 동작하며, SSH 클라이언트를 사용하여 SSH 서버에 연결합니다. 기본적으로 22번 포트를 사용하며, 강력한 암호화 기술을 통해 중간자 공격이나 데이터 가로채기와 같은 위협으로부터 통신을 보호합니다.
SSH의 주요 기능
SSH는 다음과 같은 주요 기능을 제공합니다:
SSH 주요 기능
- 원격 명령 실행: 원격 서버에서 직접 명령어를 실행할 수 있습니다.
- 안전한 파일 전송: `scp` (Secure Copy) 또는 `sftp` (SSH File Transfer Protocol)를 통해 안전하게 파일을 주고받을 수 있습니다.
- 포트 포워딩(터널링): 로컬 포트와 원격 포트 간에 암호화된 터널을 생성하여 특정 서비스를 안전하게 이용할 수 있도록 합니다.
- X11 포워딩: 원격 서버의 GUI 애플리케이션을 로컬 PC에서 실행할 수 있도록 합니다.
- SSH 키 기반 인증: 비밀번호 대신 공개키-개인키 쌍을 사용하여 더욱 강력하고 편리한 인증 방식을 제공합니다.
주요 SSH 명령어
SSH 명령어를 사용하여 원격 서버에 접속하고 다양한 작업을 수행하는 방법을 알아봅니다. 각 옵션을 조합하여 필요한 기능을 활용해 보세요.
1. 기본 접속 및 인증
2. 고급 기능 및 포워딩
생성된 명령어:
명령어를 조합해 보세요.
설명:
`ssh` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
SSH 키 기반 인증
SSH 키 기반 인증은 비밀번호 인증보다 훨씬 안전하고 편리한 방법입니다. 공개키와 개인키 쌍을 사용하여 인증하며, 비밀번호 노출 위험을 줄일 수 있습니다.
SSH 키 생성
`ssh-keygen` 명령어를 사용하여 공개키와 개인키 쌍을 생성합니다. 기본적으로 `~/.ssh/id_rsa` (개인키)와 `~/.ssh/id_rsa.pub` (공개키) 파일이 생성됩니다.
SSH 키 생성 명령어
ssh-keygen -t rsa -b 4096
디스크에 새로운 SSH 키 쌍을 생성합니다. 키 저장 위치와 암호를 설정할 수 있습니다.
공개키 배포
생성된 공개키(`id_rsa.pub`)를 원격 서버의 사용자 홈 디렉토리 내 `~/.ssh/authorized_keys` 파일에 추가해야 합니다. 이 파일에 공개키가 등록된 사용자는 해당 개인키를 사용하여 비밀번호 없이 서버에 접속할 수 있습니다.
공개키를 서버에 복사 (ssh-copy-id 사용)
ssh-copy-id user@hostname
`ssh-copy-id` 명령어를 사용하면 공개키를 원격 서버에 쉽게 복사할 수 있습니다. 가장 권장되는 방법입니다.
공개키 수동 복사 (scp 사용)
scp ~/.ssh/id_rsa.pub user@hostname:~/
ssh user@hostname "mkdir -p ~/.ssh && cat ~/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && rm ~/id_rsa.pub"
만약 `ssh-copy-id`를 사용할 수 없다면, `scp`를 사용하여 공개키 파일을 서버로 복사한 후 수동으로 `authorized_keys`에 추가할 수 있습니다.
SSH 설정 파일 (~/.ssh/config)
SSH 설정 파일(`~/.ssh/config`)을 사용하면 자주 접속하는 서버의 접속 정보를 미리 저장하여 편리하게 사용할 수 있습니다. 복잡한 옵션을 매번 입력할 필요 없이 별칭(Alias)으로 간단하게 접속할 수 있습니다.
설정 파일 예시
다음은 `~/.ssh/config` 파일의 예시입니다. 여러 호스트에 대한 접속 설정을 정의할 수 있습니다.
config 파일 내용
Host myserver
HostName 192.168.1.100
User myuser
Port 2222
IdentityFile ~/.ssh/my_server_key.pem
Host dev-web
HostName dev.example.com
User webadmin
ForwardAgent yes
LocalForward 8080 localhost:80
주요 설정 옵션
`config` 파일에서 사용할 수 있는 주요 옵션들입니다.
- Host: 이 설정 블록의 별칭입니다. `ssh myserver` 와 같이 사용합니다.
- HostName: 실제 접속할 원격 호스트의 IP 주소 또는 도메인 이름입니다.
- User: 원격 서버에 접속할 사용자 이름입니다.
- Port: 접속할 포트 번호입니다.
- IdentityFile: 인증에 사용할 개인키 파일의 경로입니다.
- LocalForward: 로컬 포트 포워딩을 설정합니다. `LocalForward [local_port] [remote_host]:[remote_port]`
- RemoteForward: 원격 포트 포워딩을 설정합니다. `RemoteForward [remote_port] [local_host]:[local_port]`
- ForwardAgent: SSH 에이전트 포워딩을 활성화합니다. 여러 서버를 거쳐 접속할 때 유용합니다.
- ServerAliveInterval: SSH 연결이 끊어지지 않도록 주기적으로 서버에 신호를 보냅니다. (초 단위)
- StrictHostKeyChecking: 호스트 키 확인 여부를 설정합니다. `yes` 또는 `no`
설정 파일을 사용한 접속
ssh myserver
`~/.ssh/config` 파일에 `myserver`라는 Host 별칭을 정의했다면, 다음과 같이 간단하게 접속할 수 있습니다.
사용 예시
SSH 명령어의 다양한 사용 예시들을 통해 원격 서버 관리 및 파일 전송 등의 실제 시나리오를 익혀보세요.
기본 SSH 접속
ssh testuser@192.168.1.100
testuser라는 이름으로 192.168.1.100 서버에 접속합니다. 비밀번호를 입력하라는 메시지가 나타납니다.
SSH 키 파일을 사용하여 접속
ssh -i ~/.ssh/my_key.pem ubuntu@ec2-1-2-3-4.compute-1.amazonaws.com
비밀번호 대신 `~/.ssh/my_key.pem` 개인키 파일을 사용하여 서버에 접속합니다. (클라우드 환경에서 많이 사용)
원격에서 단일 명령어 실행
ssh user@hostname "ls -l /var/log"
서버에 접속하지 않고 원격 서버에서 `ls -l /var/log` 명령어를 실행하고 결과를 로컬로 가져옵니다.
로컬 포트 포워딩 (웹 서비스 접속)
ssh -L 8888:localhost:80 user@hostname
로컬 PC의 8888번 포트를 통해 원격 서버의 80번 포트(웹 서버)에 접속합니다. 마치 웹 서버가 로컬에 있는 것처럼 접근할 수 있습니다.
SCP를 이용한 파일 복사 (로컬 -> 원격)
scp mylocalfile.txt user@hostname:/tmp/
로컬에 있는 `mylocalfile.txt` 파일을 원격 서버의 `/tmp/` 디렉토리로 복사합니다.
SCP를 이용한 파일 복사 (원격 -> 로컬)
scp user@hostname:/var/log/syslog .
원격 서버의 `/var/log/syslog` 파일을 로컬 PC의 현재 디렉토리로 복사합니다.