Home Linux Remote Access
Post
Cancel

Linux Remote Access

# Linux Remote Access

Q&A: SSH는 원격 컴퓨터에 CLI로 접속하는 방법인가?

질문

ssh는 명령어로 노드에서 노드로 접속할 수 있는 방법인가? 구글 리모트 데스크탑 앱처럼 멀리 떨어진 컴퓨터로 커맨드 창을 열고, 커널에 ssh 사용자 계정으로 접속하면 원격 접속이 가능한 것인가? 구글 리모트 데스크탑이 GUI 레벨이라면, SSH는 리눅스 계열의 CLI 레벨인가?

답변

큰 방향은 맞다. ssh는 한 컴퓨터에서 다른 컴퓨터로 원격 접속하기 위한 대표적인 방법이다. 특히 리눅스 서버에 원격으로 접속해서 명령어를 실행할 때 가장 많이 사용한다.

1
ssh shin@192.168.0.10

위 명령은 192.168.0.10이라는 원격 컴퓨터에 shin 사용자로 접속하겠다는 뜻이다.

다만 한 가지는 정확히 구분해야 한다. SSH는 “커널에 사용자 계정으로 접속”하는 것이 아니다. 실제 흐름은 다음에 가깝다.

1
2
3
4
5
내 컴퓨터의 ssh 클라이언트
-> 네트워크
-> 원격 컴퓨터의 ssh 서버(sshd)
-> 사용자 인증
-> 원격 컴퓨터의 셸 실행

즉 사용자는 원격 컴퓨터의 커널에 직접 접속하는 것이 아니라, 원격 컴퓨터에서 실행 중인 SSH 서버(sshd) 에 접속한다. SSH 서버가 사용자 계정과 비밀번호 또는 공개키를 확인한 뒤, 인증이 성공하면 해당 사용자 권한으로 셸을 열어준다.

예를 들어 접속 후 보이는 셸은 원격 컴퓨터의 셸이다.

1
shin@remote-server:~$

이 상태에서 입력하는 명령어는 내 컴퓨터가 아니라 원격 컴퓨터에서 실행된다.

1
2
3
pwd
ls
cat /etc/os-release

따라서 SSH는 “멀리 떨어진 컴퓨터의 터미널을 여는 방법”이라고 이해해도 좋다. 단, 화면 전체를 그래픽으로 조작하는 방식은 아니다.

구글 리모트 데스크탑과 비교하면 다음처럼 볼 수 있다.

1
2
Google Remote Desktop  원격 컴퓨터의 GUI 화면을 조작
SSH                    원격 컴퓨터의 CLI 셸을 조작

구글 리모트 데스크탑은 마우스, 창, 바탕화면, 앱 화면을 원격으로 조작한다. 반면 SSH는 보통 터미널에서 명령어를 입력해 원격 시스템을 제어한다.

그래서 다음 비유가 가능하다.

1
2
Google Remote Desktop = 원격 모니터와 마우스를 빌려 쓰는 느낌
SSH                   = 원격 터미널을 빌려 쓰는 느낌

SSH는 리눅스 계열에서 특히 많이 쓰이지만, 리눅스 전용은 아니다. macOS도 유닉스 계열이라 SSH를 자연스럽게 지원하고, Windows도 OpenSSH 클라이언트와 서버를 사용할 수 있다.

SSH 접속이 가능하려면 보통 다음 조건이 필요하다.

1
2
3
4
5
6
1. 원격 컴퓨터가 켜져 있어야 한다.
2. 원격 컴퓨터에 SSH 서버가 실행 중이어야 한다.
3. 네트워크로 원격 컴퓨터에 도달할 수 있어야 한다.
4. 방화벽에서 SSH 포트가 허용되어 있어야 한다.
5. 접속할 OS 사용자 계정이 있어야 한다.
6. 비밀번호 또는 SSH 키 인증이 성공해야 한다.

기본 SSH 포트는 보통 22번이다.

1
ssh shin@server.example.com

포트가 다르면 -p 옵션을 사용한다.

1
ssh -p 2222 shin@server.example.com

SSH는 단순히 접속만 하는 도구가 아니라, 원격 명령 실행도 할 수 있다.

1
ssh shin@192.168.0.10 "ls -la /var/log"

이 명령은 원격 서버에 접속해서 /var/log 목록을 출력한 뒤 종료한다.

정리하면 다음과 같다.

1
2
3
4
5
6
ssh                         SSH 클라이언트 명령어
sshd                        원격 컴퓨터에서 접속을 받아주는 SSH 서버
shin@192.168.0.10           원격 컴퓨터에 shin 사용자로 접속
원격 셸                     접속 성공 후 열리는 원격 CLI 환경
Google Remote Desktop       GUI 원격 제어
SSH                         CLI 원격 제어

따라서 “구글 리모트 데스크탑이 GUI 레벨의 원격 제어라면, SSH는 CLI 레벨의 원격 접속”이라는 이해는 대체로 맞다. 다만 SSH는 커널에 직접 접속하는 것이 아니라, 원격 OS에서 동작하는 SSH 서버를 통해 사용자 인증 후 셸을 실행하는 방식이라고 정확히 이해해야 한다.

Q&A: 데이터센터 노드, Headless 서버, SSH, EC2

질문

데이터 센터의 노드는 전부 headless PC라고 할 수 있고, SSH로 접속한 다음 거기서 앱 배포를 하거나 서버 관리를 하는 식인가? AWS의 EC2 사용 방식이 이것을 채택하고 있는가?

답변

큰 방향은 맞다. 데이터센터에 있는 서버들은 대부분 모니터, 키보드, 마우스를 직접 연결해서 쓰는 개인용 PC처럼 운영하지 않는다. 보통은 headless 서버처럼 운영한다.

여기서 headless란 그래픽 모니터나 데스크톱 환경 없이, 네트워크를 통해 원격으로 관리되는 방식을 말한다.

1
headless server = 직접 화면을 보고 조작하지 않고, 네트워크로 원격 관리하는 서버

다만 “데이터센터의 노드는 전부 headless PC”라고 표현하면 조금 좁다. 데이터센터의 노드는 보통 다음을 포함한다.

1
2
3
4
5
6
물리 서버 bare-metal server
가상 머신 VM
컨테이너를 실행하는 호스트
스토리지 노드
네트워크 장비
관리용 서버

즉 일반적인 PC라기보다는, 서버용 하드웨어 또는 그 위에서 실행되는 가상화된 컴퓨팅 단위라고 보는 편이 정확하다.

리눅스 서버 관리에서는 SSH가 매우 일반적인 접속 방식이다.

1
ssh ubuntu@server.example.com

접속 후에는 원격 서버의 셸에서 다음과 같은 작업을 한다.

1
2
3
4
5
6
7
8
패키지 설치
설정 파일 수정
로그 확인
프로세스 상태 확인
서비스 재시작
애플리케이션 배포
디스크/메모리/CPU 상태 점검
방화벽 설정

예를 들면 다음과 같은 명령을 원격 서버에서 실행할 수 있다.

1
2
3
4
5
6
sudo apt update
sudo systemctl status nginx
journalctl -u nginx
cd /srv/my-app
git pull
sudo systemctl restart my-app

하지만 현대 운영에서는 사람이 매번 SSH로 들어가서 수동으로 배포하는 방식만 쓰지는 않는다. 규모가 커질수록 자동화 도구를 많이 사용한다.

1
2
3
4
5
6
SSH 수동 접속
배포 스크립트
Ansible 같은 구성 관리 도구
CI/CD 파이프라인
Docker/Kubernetes 기반 배포
클라우드 제공 관리 도구

즉 SSH는 기본적이고 강력한 관리 통로지만, 큰 시스템에서는 SSH 위에 자동화 계층을 얹거나, SSH 없이도 관리 가능한 방식을 함께 사용한다.

AWS EC2도 이 모델을 매우 대표적으로 사용한다. EC2에서 Linux 인스턴스를 만들면 보통 SSH 키 페어를 등록하고, 다음처럼 접속한다.

1
ssh -i my-key.pem ubuntu@ec2-public-ip

Amazon Linux라면 사용자 이름이 보통 ec2-user인 경우가 많다.

1
ssh -i my-key.pem ec2-user@ec2-public-ip

Ubuntu AMI라면 보통 ubuntu 사용자로 접속한다.

1
ssh -i my-key.pem ubuntu@ec2-public-ip

접속 후에는 일반 리눅스 서버처럼 패키지를 설치하고, 앱을 실행하고, 로그를 확인하고, 서비스를 관리한다.

1
2
3
sudo apt update
sudo apt install nginx
sudo systemctl start nginx

다만 EC2가 반드시 SSH만 사용하는 것은 아니다. Windows EC2는 보통 RDP로 접속하고, Linux EC2도 AWS Systems Manager Session Manager를 사용하면 SSH 포트를 열지 않고도 세션 접속을 할 수 있다.

1
2
3
Linux EC2   보통 SSH
Windows EC2 보통 RDP
SSM Session Manager SSH 대체 또는 보완 수단

정리하면 다음과 같다.

1
2
3
4
5
데이터센터 서버는 보통 headless 방식으로 운영된다.
SSH는 리눅스 서버에 원격 CLI로 접속하는 대표적인 방법이다.
서버 관리와 앱 배포를 SSH 세션에서 직접 수행할 수 있다.
EC2의 Linux 인스턴스도 기본적으로 이 방식을 많이 사용한다.
하지만 대규모 운영에서는 SSH 수동 작업보다 자동화와 관리 도구를 함께 사용한다.

따라서 “GUI 원격 제어 대신 SSH로 CLI 접속해서 서버를 관리하고 앱을 배포한다”는 이해는 맞다. 다만 데이터센터의 노드는 단순한 PC라기보다 서버, VM, 컨테이너 호스트 같은 컴퓨팅 자원이고, EC2는 그중 VM 기반 클라우드 서버를 SSH로 관리하는 대표적인 예라고 보면 된다.

This post is licensed under CC BY 4.0 by the author.