지난 포스팅에서 SSH 키젠(Key Generation)을 통해 안전한 SSH 접속을 위한 준비를 마쳤습니다.
지난 포스트 보기 : SSH keygen: 초보자를 위한 완벽 가이드
이제 실제로 SSH를 사용하여 원격 서버에 접속하는 방법을 알아볼 차례입니다. SSH 명령어는 생각보다 간단하지만, 몇 가지 원칙과 유용한 옵션들을 알아두면 훨씬 효율적으로 사용할 수 있습니다.
SSH 명령어, 어떻게 작성할까요?
SSH 명령어의 기본 형식은 다음과 같습니다.
ssh [옵션] [사용자이름]@[호스트주소] [명령어]
각각의 요소가 무엇을 의미하는지 자세히 살펴볼까요?
-
ssh
: SSH 클라이언트를 실행하는 명령어입니다. -
[옵션]
: SSH 접속 방식을 제어하는 다양한 옵션들을 지정할 수 있습니다. 예를 들어, 특정 키 파일을 사용하거나, 포트 포워딩을 설정하는 등의 기능을 수행합니다. (뒤에서 자세히 다룹니다.) -
[사용자이름]
: 접속하려는 원격 서버의 사용자 계정 이름입니다. 만약 로컬 컴퓨터의 사용자 이름과 원격 서버의 사용자 이름이 같다면 생략할 수 있습니다. -
[호스트주소]
: 접속하려는 원격 서버의 IP 주소 또는 도메인 이름입니다. -
[명령어]
(선택 사항): SSH 접속 후 원격 서버에서 즉시 실행하고 싶은 명령어가 있다면 여기에 입력합니다. 이 명령어가 실행된 후 SSH 세션은 종료됩니다. 이 부분을 생략하면 서버에 로그인하여 대화형 셸(Shell)을 사용할 수 있습니다.
명령어 작성 원칙과 외우기 쉬운 팁
SSH 명령어는 "어떤 사용자가 어느 서버로 접속할 것인가?"를 명확히 알려주는 구조입니다.
-
기본 원칙:
ssh 사용자이름@호스트주소
- 예시:
ssh ubuntu@192.168.1.100
(192.168.1.100 서버의ubuntu
계정으로 접속) - 예시:
ssh root@mywebserver.com
(https://www.google.com/search?q=mywebserver.com 서버의root
계정으로 접속) -
외우기 쉬운 팁:
-
"나(로컬 사용자)는 저기(원격 서버)에 있는 누구(원격 사용자)로 들어갈래!" 라고 생각해보세요.
ssh
(나는 접속할래)[사용자이름]@
(누구로)[호스트주소]
(어디에)- 자주 접속하는 서버는
~/.ssh/config
파일을 활용하면 매번 긴 주소를 입력할 필요 없이 별칭(Alias)을 사용하여 편리하게 접속할 수 있습니다. (이 부분은 다음 포스팅에서 더 자세히 다루겠습니다!)
- 예시:
유용한 SSH 옵션들 파헤치기
SSH는 다양한 상황에 맞춰 강력한 기능을 제공하는 여러 옵션을 가지고 있습니다. 몇 가지 핵심적인 옵션들을 소개해 드릴게요.
1. -i <IdentityFile>
: 특정 비공개 키 파일 지정
여러 개의 SSH 키를 가지고 있을 때, 특정 서버에 접속하기 위해 특정 비공개 키를 사용하고 싶을 때 사용합니다. 기본적으로 ~/.ssh/id_rsa
또는 ~/.ssh/id_ed25519
를 사용하지만, 다른 이름으로 생성했거나 여러 키를 관리할 때 유용합니다.
- 사용법:
ssh -i ~/.ssh/my_custom_key ubuntu@my_server.com
-
예시:
ssh -i ~/.ssh/id_ed25519_my_server ubuntu@example.com
Enter passphrase for key '/home/youruser/.ssh/id_ed25519_my_server':
2. -p <Port>
: 원격 서버의 SSH 포트 지정
대부분의 SSH 서버는 기본적으로 22번 포트를 사용합니다. 하지만 보안상의 이유로 관리자가 SSH 포트를 변경해 놓는 경우가 많습니다. 이럴 때 -p
옵션을 사용하여 변경된 포트 번호를 지정해줘야 합니다.
- 사용법:
ssh -p 2222 your_user@your_server.com
(2222번 포트로 접속) -
예시:
ssh -p 2222 myuser@192.168.1.100 The authenticity of host '192.168.1.100:2222 (...)' can't be established. Are you sure you want to continue connecting (yes1/no/[fingerprint])? yes Warning: Permanently added '192.168.1.100:2222' (ED25519) to the list of known hosts. Last login: Mon Jun 17 10:00:00 2024 from your_ip myuser@server:~ $
3. -X
: X11 포워딩 활성화 (그래픽 프로그램 실행)
원격 서버에 GUI(Graphical User Interface) 애플리케이션이 설치되어 있고, 이를 로컬 컴퓨터의 화면에 띄워서 사용하고 싶을 때 사용합니다. X Window System을 사용하며, 로컬 시스템에 X 서버가 실행 중이어야 합니다 (macOS는 XQuartz, Windows는 PuTTY + VcXsrv 등 필요).
- 사용법:
ssh -X your_user@your_server.com
-
예시:
ssh -X myuser@remote-gui-server.com myuser@remote-gui-server:~ $ firefox &
접속 후 원격 서버에서 firefox 실행 (로컬 화면에 firefox 창이 뜸).
성능이 좋지 않거나 네트워크 지연이 심할 경우 불편할 수 있습니다.
4. -L <LocalPort>:<RemoteHost>:<RemotePort>
: 로컬 포트 포워딩 (Local Port Forwarding)
로컬 컴퓨터의 특정 포트(LocalPort)로 들어오는 연결을 SSH 터널을 통해 원격 서버(RemoteHost)의 특정 포트(RemotePort)로 전달하는 기능입니다. 주로 방화벽 뒤에 있는 서비스에 접속하거나, 로컬에서 개발한 애플리케이션이 원격 데이터베이스에 접속해야 할 때 유용합니다.
- 사용법:
ssh -L 8080:localhost:80 your_user@your_server.com
- 이 명령어는 로컬 컴퓨터의 8080번 포트로 들어오는 모든 연결을
your_server.com
을 경유하여your_server.com
내부의 80번 포트(localhost:80
은your_server.com
자체를 의미)로 전달합니다.
- 이 명령어는 로컬 컴퓨터의 8080번 포트로 들어오는 모든 연결을
-
예시:
-
원격 서버의 웹서버(80번 포트)에 직접 접속할 수 없고 SSH만 가능할 때:
ssh -L 8080:localhost:80 myuser@my_web_server.com
이 명령어를 실행한 후, 로컬 웹 브라우저에서 http://localhost:8080 에 접속하면
실제로는 my_web_server.com의 80번 포트에 접속하는 것과 동일한 효과를 냅니다. -
로컬에서
my_db_app
이 원격db_server.internal
의 3306번 MySQL 포트에 접속해야 하는데,db_server.internal
은my_app_server.com
에서만 접속 가능할 때:ssh -L 3307:db_server.internal:3306 myuser@my_app_server.com
이 명령어를 실행한 후, 로컬에서 my_db_app이 localhost:3307 로 접속하면
my_app_server.com을 거쳐 db_server.internal의 3306번 포트로 접속하게 됩니다.-
(3307을 사용하는 이유는 로컬에 이미 3306 포트를 사용하는 MySQL이 있을 수 있기 때문입니다.)
-
-
5. -N
: 원격 명령어 실행 없이 포트 포워딩만 유지
-L
또는 -D
(Dynamic Port Forwarding, SOCKS 프록시) 옵션과 함께 사용되어, SSH 세션을 열지만 원격 서버에서 셸 명령어를 실행하지 않고 단순히 포트 포워딩 기능만 유지할 때 사용합니다. 주로 백그라운드에서 포트 포워딩 터널을 유지할 때 유용합니다.
- 사용법:
ssh -N -L 8080:localhost:80 your_user@your_server.com
-
예시:
ssh -N -L 8080:localhost:80 myuser@my_web_server.com &
백그라운드(&)에서 포트 포워딩 터널을 열어두고 로컬에서 웹브라우저로 접속 가능
6. -f
: SSH 세션을 백그라운드로 전환
SSH 접속이 성공한 후, SSH 클라이언트 프로세스를 백그라운드로 보내는 옵션입니다. 주로 -N
옵션과 함께 사용하여 포트 포워딩 터널을 백그라운드에서 유지할 때 사용합니다.
- 사용법:
ssh -f -N -L 8080:localhost:80 your_user@your_server.com
-
예시:
ssh -f -N -L 8080:localhost:80 myuser@my_web_server.com
이 명령어를 실행하면 즉시 터미널 제어권이 반환되며, SSH 터널은 백그라운드에서 실행됩니다.
ps aux | grep ssh 명령어로 프로세스 확인 가능
마치며
이번 포스팅에서는 SSH 명령어의 기본적인 구조와 함께 자주 사용되는 핵심 옵션들을 살펴보았습니다. 특히 -p
를 이용한 포트 지정과 -L
을 이용한 포트 포워딩은 실무에서 매우 자주 활용되니 꼭 익혀두시는 것을 추천합니다.
다음 포스팅에서는 ~/.ssh/config
파일을 활용하여 SSH 접속을 더욱 편리하게 관리하는 방법에 대해 알아보겠습니다. 궁금한 점이 있다면 언제든지 댓글로 남겨주세요!
댓글이 없습니다.