리눅스 필수 설정 2: SSH 서버 설치와 상태 확인

데비안 리눅스에서 SSH 서버가 설치되어 있고 현재 동작 중인지 확인하는 방법을 설명한다. systemctl status ssh 명령으로 LoadedActive 상태를 확인하고, Unit ssh.service could not be found.가 표시되면 openssh-server 패키지를 설치한다. 설치 후 상태를 다시 확인하며, 필요한 경우 systemctl enable --now ssh 명령으로 서비스를 시작하고 부팅할 때 자동으로 실행되도록 설정한다.

SSH란?

SSH는 간단하게 말해 텔넷(Telnet)의 암호화 버전으로, 윈도우에서 사용하는 원격 데스크톱이나 TeamViewer 같은 원격 연결 수단이다.

리눅스 시스템은 대부분 서버의 역할을 감당한다. 때문에 최소한의 모니터와 키보드도 없이 어딘가 구석에 처박혀 있을 가능성이 크다. 이러한 리눅스 시스템에 접근하여 필요한 작업을 수행하는 데 사용할 수 있는 유용하고 가장 기본적인 도구가 바로 SSH로, 보통 TCP 22번 포트를 사용해 통신한다.

단순한 터미널 접속뿐 아니라, 파일 전송이나 원격 시스템의 GUI 접속까지 온갖 방식의 데이터를 원격지의 리눅스 시스템과 주고 받는데 기반이 되어 준다.

SSH 서비스 동작 상태 확인

먼저 SSH 서버가 설치되어 있고 현재 동작 중인지 확인한다.

systemctl status ssh 명령을 입력하고 엔터를 누르자. 아래 예에서는 sudo를 함께 사용했다.

newuser@debian:/$ sudo systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
    Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
    Active: active (running) since Tue 2024-11-05 15:34:08 KST; 1h 23min ago
      Docs: man:sshd(8)
            man:sshd_config(5)
   Main PID: 545 (sshd)
     Tasks: 1 (limit: 19041)
    Memory: 8.4M
       CPU: 283ms
    CGroup: /system.slice/ssh.service
            └─545 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Loaded: loaded를 통해 SSH 서비스 유닛이 정상적으로 로드된 것을 확인할 수 있다. 같은 줄에 함께 표시된 enabled는 시스템이 부팅될 때 자동으로 시작하도록 설정되어 있다는 의미이다.

Active: active (running)을 통해 SSH 서비스가 현재 실행 중이라는 것을 알 수 있으며, 예에서는 1시간 23분째 가동 중이라는 내용도 함께 표시된다.

반대로 다음과 같이 표시될 수도 있다.

newuser@debian:~$ sudo systemctl status ssh
Unit ssh.service could not be found.

Unit ssh.service could not be found. 메시지는 SSH 서비스 유닛을 찾을 수 없다는 의미로, OpenSSH 서버 패키지가 설치되어 있지 않은 경우에 표시된다. 이러한 경우에는 OpenSSH 서버를 설치해야 한다.

OpenSSH 서버 설치 방법

SSH 서비스가 존재하지 않는다면 openssh-server 패키지를 직접 설치해 주어야 한다. 아래의 명령으로 OpenSSH 서버 패키지를 설치할 수 있다.

sudo apt install openssh-server

다음은 Debian 12 Bookworm에서 설치한 예이다. 사용하는 데비안 버전과 패키지 업데이트 상태에 따라 OpenSSH의 버전, 추가로 설치되는 패키지와 출력 내용은 달라질 수 있다.

newuser@debian:~$ sudo apt install openssh-server
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다... 완료
상태 정보를 읽는 중입니다... 완료
The following additional packages will be installed:
  libwrap0 openssh-sftp-server runit-helper
제안하는 패키지:
  molly-guard monkeysphere ssh-askpass ufw
다음 새 패키지를 설치할 것입니다:
  libwrap0 openssh-server openssh-sftp-server runit-helper
0개 업그레이드, 4개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
583 k바이트 아카이브를 받아야 합니다.
이 작업 후 2,327 k바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n]
받기:1 http://deb.debian.org/debian bookworm/main amd64 openssh-sftp-server amd64 1:9.2p1-2+deb12u3 [65.8 kB]
받기:2 http://deb.debian.org/debian bookworm/main amd64 runit-helper all 2.15.2 [6,520 B]
받기:3 http://deb.debian.org/debian bookworm/main amd64 libwrap0 amd64 7.6.q-32 [54.9 kB]
받기:4 http://deb.debian.org/debian bookworm/main amd64 openssh-server amd64 1:9.2p1-2+deb12u3 [456 kB]
내려받기 583 k바이트, 소요시간 0초 (8,042 k바이트/초)
패키지를 미리 설정하는 중입니다...
Selecting previously unselected package openssh-sftp-server.
(데이터베이스 읽는 중 ... 현재 33758개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../openssh-sftp-server_1%3a9.2p1-2+deb12u3_amd64.deb ...
Unpacking openssh-sftp-server (1:9.2p1-2+deb12u3) ...
Selecting previously unselected package runit-helper.
Preparing to unpack .../runit-helper_2.15.2_all.deb ...
Unpacking runit-helper (2.15.2) ...
Selecting previously unselected package libwrap0:amd64.
Preparing to unpack .../libwrap0_7.6.q-32_amd64.deb ...
Unpacking libwrap0:amd64 (7.6.q-32) ...
Selecting previously unselected package openssh-server.
Preparing to unpack .../openssh-server_1%3a9.2p1-2+deb12u3_amd64.deb ...
Unpacking openssh-server (1:9.2p1-2+deb12u3) ...
runit-helper (2.15.2) 설정하는 중입니다 ...
openssh-sftp-server (1:9.2p1-2+deb12u3) 설정하는 중입니다 ...
libwrap0:amd64 (7.6.q-32) 설정하는 중입니다 ...
openssh-server (1:9.2p1-2+deb12u3) 설정하는 중입니다 ...
Creating config file /etc/ssh/sshd_config with new version
Creating SSH2 RSA key; this may take some time ...
3072 SHA256:4qcjiT/SPKDgVumH5pN8GaI4WN2ag4HzY0Yf7vvpD1A root@debian (RSA)
Creating SSH2 ECDSA key; this may take some time ...
256 SHA256:xFd0GH9apekDQHILjIBATi5ycvQ2SC3Xxv6tzcITkzo root@debian (ECDSA)
Creating SSH2 ED25519 key; this may take some time ...
256 SHA256:Ir5tChXthopxZUGSWCNu/LBS+2pKb/t6Tnr5ZuuLdtQ root@debian (ED25519)
Created symlink /etc/systemd/system/sshd.service → /lib/systemd/system/ssh.service.
Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/systemd/system/ssh.service.
rescue-ssh.target is a disabled or a static unit, not starting it.
ssh.socket is a disabled or a static unit, not starting it.
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for libc-bin (2.36-9+deb12u8) ...
newuser@debian:~$

별다른 문제가 없다면 위의 예와 같이 필요한 패키지를 내려받아 설치하고, SSH 서버에서 사용할 호스트 키를 자동으로 생성한 다음 ssh.service를 등록한다.

설치가 끝나면 OpenSSH 서버가 제대로 동작하는지 다시 확인한다.

sudo systemctl status ssh

Loaded: loadedActive: active (running)이 각각 표시된다면 OpenSSH 서버가 정상적으로 설치되어 현재 동작 중인 것이다.

OpenSSH 서버가 설치되어 있지만 Active: active (running)으로 표시되지 않는다면 다음 명령으로 서비스를 시작하고, 시스템을 부팅할 때 자동으로 실행되도록 설정할 수 있다.

newuser@debian:~$ sudo systemctl enable --now ssh

명령을 실행한 후 sudo systemctl status ssh를 다시 입력하여 Active: active (running) 상태인지 확인한다.

여기까지 확인했다면 SSH 서버의 설치와 동작에 필요한 기본 설정은 끝났다. 이후에는 Xshell이나 PuTTY 같은 SSH 클라이언트를 이용해 접속하여 사용하면 되겠다. 클라이언트의 설정과 접속 방법은 이 글에서 다루지 않는다.

마무리

SSH 서버는 다른 장소에서 데비안 시스템을 관리할 때 사용할 수 있는 아주 유용한 도구이다. 데스크톱이나 로컬 환경에서만 사용하는 시스템이라면 굳이 설치할 필요는 없지만, 서버로 사용하거나 원격 관리가 필요한 시스템에서는 사실상 필수로 사용되므로 가장 먼저 확인해야 할 기능 중 하나이다.

FAQ

데비안 리눅스에는 SSH 서버가 기본으로 설치되는가?
설치 과정에서 선택한 항목에 따라 다르다. SSH 서버가 설치되어 있는지는 systemctl status ssh 명령으로 확인할 수 있으며, 서비스 유닛을 찾을 수 없다고 표시된다면 openssh-server 패키지를 설치해야 한다.
Unit ssh.service could not be found. 메시지가 표시되는 이유는?
시스템에서 ssh.service 유닛을 찾을 수 없기 때문이다. sudo apt install openssh-server 명령으로 설치할 수 있다.
SSH 서버가 정상적으로 실행 중인지 확인하는 방법은?
systemctl status ssh를 실행하여 확인할 수 있다. Loaded: loadedActive: active (running)이 각각 표시된다면 SSH 서버가 설치되어 정상적으로 실행 중인 것이다.
SSH 서버는 OpenSSH 한 가지만 있는가?
아니다. SSH 서버를 구현한 프로그램은 OpenSSH 이외에도 여러 가지가 존재한다. 다만 일반적인 데비안 서버에서는 기능과 호환성이 풍부한 OpenSSH를 가장 널리 사용한다.
SSH 서버의 설정은 어디에서 수정하는가?
OpenSSH 서버의 기본 설정 파일은 /etc/ssh/sshd_config이다. 추가 설정은 /etc/ssh/sshd_config.d/ 디렉토리의 설정 파일을 통해 적용할 수도 있다. 설정을 변경한 후에는 문법 오류를 확인하고 SSH 서비스를 다시 불러오거나 재시작해야 한다.
SSH 서버를 꼭 설치해야 하는가?
SSH 서버가 꼭 필수는 아니지만, 리눅스 시스템을 원격으로 관리할 때 매우 일반적이고 광범위하게 사용할 수 있으므로 설치할 것을 권장한다. 데스크톱 환경이나 로컬 환경에서만 사용한다면 굳이 설치하지 않아도 무방하다.
SSH로 할 수 있는 작업은 어떤 것이 있는가?
SSH의 기본 용도는 원격으로 셸 콘솔에 접속하는 것이다. 여기에 더해 SCPSFTP를 이용한 파일 전송과 X11 포워딩을 이용한 리눅스 그래픽 어플리케이션의 원격 실행에도 활용할 수 있다.
SSH가 사용하는 포트는?
SSH는 TCP 22번을 표준 포트로 사용하며, 사용자가 지정한 다른 포트를 사용해도 무방하다.
SSH와 텔넷(Telnet)의 차이는?
Telnet은 계정 정보와 통신 내용을 평문으로 전송하지만, SSH는 통신 내용을 암호화하여 전송한다.
SSH 클라이언트 프로그램에는 어떤 것이 있는가?
PuTTY와 Xshell 등이 있으며, 모바일 환경에서도 SSH 클라이언트 어플리케이션을 사용할 수 있다.
SSH 클라이언트가 서버의 키를 저장한다는 것은 무슨 의미인가?
SSH 클라이언트가 서버에 처음 접속할 때 저장하는 키는 해당 서버의 신원을 확인하기 위한 호스트 키이다. 다음 접속 때 저장된 호스트 키와 서버가 제시한 키를 비교하여 이전에 접속한 서버와 같은 서버인지 확인한다. 실제 통신 내용은 접속 과정에서 별도로 만들어진 세션 키를 이용해 암호화한다.
SSH 이외에도 원격으로 리눅스 시스템을 관리하는 도구가 있는가?
있다. 웹 브라우저에서 서버를 관리하는 Cockpit이나 Webmin, 그래픽 화면에 접속하는 VNC와 xrdp, 여러 시스템의 설정을 자동화하는 Ansible 같은 도구를 사용할 수 있다. 다만 용도와 관리 방식이 서로 다르므로 SSH를 완전히 대체한다기보다 필요한 기능에 따라 함께 사용하는 경우가 많다.

갱신 내역

  1. 최초 게시
  2. 수정
  3. 수정 및 주소 이전 (https://www.EQMaker.kr/)