← 전체 글로

우분투 서버를 받고, 접속과 보안부터 챙겼습니다

기록하는 사람 조회 9

서버 신청부터 AI 에이전트 활용까지 · 2편

사진과 그림을 누르면 원본을 크게 볼 수 있습니다.

지난 글에서는 AI 에이전트를 계속 켜두고 쓰려고 Vultr에서 서버를 한 대 빌린 이유를 적었습니다. 이번에는 서버를 받은 뒤 가장 먼저 한 일, 접속 방법과 기본 보안을 정리한 이야기입니다.

AI 프로그램은 그다음 순서로 미뤘습니다. 인터넷에 연결된 서버는 저 말고도 누구나 문을 두드려볼 수 있는 상태라서, 문단속을 먼저 하는 순서로 계획을 잡아두었습니다.

우분투 서버, 그리고 원격 접속

제가 받은 서버에는 우분투(Ubuntu) 24.04 LTS가 설치돼 있었습니다. 우분투는 서버에서 많이 쓰는 무료 운영체제이고, LTS는 보안 업데이트를 오래 지원하는 버전이라는 뜻입니다. 계속 켜두고 쓰는 서버라면 이런 버전이 관리하기 편합니다.

서버에는 모니터가 없으니 내 PC에서 원격으로 접속해 명령을 입력합니다. 이때 쓰는 방식을 SSH라고 하는데, 서버를 관리하는 대표적인 원격 접속 방법입니다. 결국 이 SSH 접속을 누가, 어떤 경로로 할 수 있느냐가 서버 보안의 출발점이었습니다.

비밀번호 대신 열쇠 파일로 접속하게 했습니다

먼저 운영체제를 최신 상태로 업데이트하고, 평소 작업에 쓸 일반 관리자 계정을 따로 만들었습니다. 서버에서 모든 권한을 가진 최고 관리자 계정(root)으로는 바로 로그인하지 못하게 막았습니다.

비밀번호 로그인도 껐습니다. 대신 '공개키' 방식만 허용했는데, 내 PC에 보관한 열쇠 파일이 있어야만 들어갈 수 있게 하는 방법입니다. 비밀번호는 누군가 계속 추측해 볼 수 있지만, 열쇠 파일은 제 PC 밖으로 나가지 않는 한 맞춰볼 방법이 마땅치 않습니다. 그만큼 열쇠 파일 자체는 잘 보관해야 하고요.

관리 통로를 Tailscale로 옮겼습니다

여기까지 해도 서버의 접속 통로는 여전히 인터넷 전체에 열려 있었습니다. 열쇠가 없으면 못 들어오긴 하지만, 관리 통로는 아예 인터넷에서 보이지 않게 옮기기로 했습니다.

그래서 Tailscale을 설치했습니다. Tailscale은 제 계정에 등록한 기기들끼리만 안전하게 연결해 주는 서비스입니다. 쉽게 말해 나만 쓰는 전용 통로를 만드는 셈입니다. 서버와 관리용 PC를 Tailscale에 연결하면, 인터넷의 다른 사람에게는 보이지 않는 경로로 서로 접속할 수 있습니다.

순서는 이렇게 진행했습니다. Tailscale을 통해 관리용 PC에서 서버에 접속되는 것을 먼저 확인했고, 그다음에 인터넷 쪽으로 열려 있던 SSH 통로를 닫았습니다. 순서를 거꾸로 하면 새 통로가 준비되기 전에 기존 통로가 닫혀서 서버에 들어갈 방법이 없어질 수 있습니다.

설정을 마친 뒤에는 서버의 공개 주소로는 관리 접속이 되지 않고, Tailscale을 거쳐야만 SSH로 들어갈 수 있는 것을 확인했습니다. 이후 관리 작업도 이 통로로 이어가고 있습니다.

한 가지 헷갈리기 쉬운 점이 있습니다. Tailscale을 거쳐 접속하는 'Tailscale SSH'는 앞에서 말한 열쇠 파일 방식과 확인하는 방법이 다릅니다. 서버에 등록한 열쇠 파일 대신, 제 Tailscale 계정 로그인과 Tailscale 관리 화면에 정해 둔 접근 규칙으로 누가 어떤 서버 계정으로 들어올 수 있는지를 정합니다. 그래서 서버 설정에서 막아 둔 비밀번호·root 로그인 차단은 일반 SSH 통로에 적용되는 것이고, Tailscale SSH로 들어올 때의 허용 범위는 Tailscale 쪽 규칙에서 따로 확인해야 합니다.

정리하면 처음 받은 서버에서 바꾼 것은 이렇습니다.

항목처음 받은 서버정리한 뒤
로그인 계정root 계정으로 접속할 수 있음(서버 이미지와 선택 항목에 따라 다름)일반 관리자 계정으로 접속, 일반 SSH의 root 직접 로그인 차단
일반 SSH의 확인 방법비밀번호나 열쇠 파일(선택에 따라 다름)PC에 보관한 열쇠 파일(공개키)만 허용
Tailscale SSH의 확인 방법없음Tailscale 계정 로그인과 관리 화면의 접근 규칙
접속 통로인터넷 전체에 열림Tailscale 전용 통로로만 접속

가끔 브라우저에서 기기 승인을 요구합니다

운영하다 보니 Tailscale로 접속할 때 브라우저에서 이 기기를 한 번 더 승인해 달라는 요청이 뜬 적이 있었습니다. 승인하기 전에는 접속은 되는데 명령이 실행되지 않았고요.

처음 보면 고장인가 싶지만, Tailscale 공식 문서에 따르면 중요한 접속에는 일정 시간마다 다시 인증하도록 하는 확인 기능이 있습니다. 브라우저에서 해당 기기를 승인하고 다시 접속하면 됩니다. 이럴 때 급하다고 닫아둔 인터넷 쪽 접속 통로를 다시 여는 건 피하는 게 좋습니다. Tailscale SSH 안내

한 번 설정으로 끝나지는 않았습니다

여기 적은 건 서버를 처음 받았을 때 한 기본 정리입니다. 이후에도 운영체제와 Tailscale 같은 프로그램의 업데이트는 따로 챙겨야 했습니다. 보안은 처음 한 번 맞춰두고 끝나는 게 아니라, 계속 업데이트하고 점검해야 하는 일이었습니다.

직접 따라 해보기

여기부터는 같은 구성을 직접 해보실 분을 위한 순서입니다. 명령어는 우분투 24.04 기준이고, 화면 이름은 2026년 10월 공식 문서 기준이라 바뀔 수 있습니다. 서버주소, 사용자이름처럼 한글로 적은 부분은 본인 값으로 바꿔 넣으시면 됩니다.

준비물: 서버 계정(1편), 관리용 PC(맥은 '터미널', 윈도우는 'PowerShell' 앱 사용), 휴대폰 인증 앱

1단계. 내 PC에서 접속용 열쇠 만들기

관리용 PC의 터미널에서 아래 명령을 실행합니다. 열쇠 파일 두 개가 만들어지는데, 이름이 .pub으로 끝나는 '공개키'만 서버에 등록하고 나머지 하나(개인키)는 절대 밖으로 보내지 않습니다.

ssh-keygen -t ed25519 -f ~/.ssh/my_server_key
  • 폴더가 없다는 오류가 나면 맥에서는 mkdir -p ~/.ssh를 먼저 실행합니다.
  • 같은 이름의 파일이 이미 있다며 덮어쓸지 물으면 n을 누르고 다른 이름으로 다시 만듭니다. 기존 열쇠를 덮어쓰면 그 열쇠로 들어가던 서버에 못 들어갈 수 있습니다.
  • 열쇠 암호(passphrase)를 정하라는 질문이 나오면 정해 두는 편이 좋습니다. 열쇠 파일이 새어 나가도 암호 없이는 바로 쓸 수 없습니다.

2단계. 서버 만들기

  1. Vultr 콘솔에서 Orchestration → SSH Keys로 들어가 방금 만든 공개키(my_server_key.pub 파일 내용)를 등록합니다.
  2. 왼쪽 메뉴의 Compute에서 새 서버 만들기(Create Instance)로 들어갑니다. 위쪽 Plan에서 Shared CPU를 고르고, 아래 목록에서 요금제를 고릅니다. 저는 4 vCPU·12GB인 vhp-4c-12gb를 골랐습니다. 오른쪽 요약의 Location이 Seoul인지 확인하고 Configure를 누릅니다.
Vultr Create Instance 화면. 요약 칸에 Shared CPU, vhp-4c-12gb, 월 72달러, 위치 Seoul이 보임
Vultr 서버 만들기 화면(2026년 10월 29일)에서 필요한 부분만 잘랐습니다. 그림을 누르면 전체 화면이 열립니다. 설명을 위해 항목만 골라 본 화면이며 이 상태로 서버를 만들지는 않았습니다.
  1. 다음 화면의 Operating System에서 Ubuntu를 고르고, Image Version을 Ubuntu 24.04 LTS x64로 맞춥니다.
Vultr 운영체제 선택 화면. Ubuntu가 선택되어 있고 Image Version이 Ubuntu 24.04 LTS x64
Vultr 서버 만들기 화면(2026년 10월 29일)에서 필요한 부분만 잘랐습니다. 그림을 누르면 전체 화면이 열립니다. 설명을 위해 항목만 골라 본 화면이며 이 상태로 서버를 만들지는 않았습니다.
  1. 아래로 내려 Server Settings의 SSH Keys에서 1번에서 등록한 열쇠를 선택합니다.
Vultr Server Settings 화면. SSH Keys 칸에 등록한 열쇠가 선택되어 있음(이름은 가림)
Vultr 서버 만들기 화면(2026년 10월 29일)에서 필요한 부분만 잘랐습니다. 그림을 누르면 전체 화면이 열립니다. 설명을 위해 항목만 골라 본 화면이며 이 상태로 서버를 만들지는 않았습니다.
  1. 더 아래 Additional Features에서 Limited User Login을 켜면 root 대신 쓸 일반 관리자 계정(linuxuser)이 함께 만들어집니다. 자동 백업이 필요하면 Automatic Backups도 여기서 켭니다. 화면에 나온 백업 요금은 서버 요금의 20%였습니다.
Vultr Additional Features 중 Automatic Backups와 Limited User Login이 켜진 부분
Vultr 서버 만들기 화면(2026년 10월 29일)에서 필요한 부분만 잘랐습니다. 그림을 누르면 전체 화면이 열립니다. 설명을 위해 항목만 골라 본 화면이며 이 상태로 서버를 만들지는 않았습니다.
  1. 서버 이름을 정하고 오른쪽의 Deploy를 누르면 몇 분 뒤 서버가 준비됩니다. 이 버튼부터 요금이 나가기 시작합니다.

3단계. 처음 접속하고 업데이트하기

서버 목록에서 공개 IP 주소를 확인한 뒤 접속합니다. Limited User Login을 켰다면 사용자 이름은 linuxuser입니다.

ssh -i ~/.ssh/my_server_key linuxuser@서버주소
sudo apt update && sudo apt upgrade -y

처음 접속하면 서버의 '지문(fingerprint)'이라는 긴 문자열을 보여주며 계속 연결할지 묻습니다. 내가 접속하려는 서버가 맞는지 확인하는 단계라서, 그냥 yes를 누르기보다 한 번 대조해 보는 것이 안전합니다. Vultr 콘솔의 서버 화면에서 웹 콘솔(View Console)로 들어가 아래 명령을 실행하면 서버의 지문이 나옵니다. 질문에 나온 지문과 같을 때만 yes를 입력하고, 다르면 접속하지 말고 원인을 먼저 확인합니다.

ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

4단계. Tailscale로 전용 통로 만들기

  1. 관리용 PC에 Tailscale을 설치하고 로그인합니다. 다운로드 페이지에서 내 PC의 운영체제를 고르면 됩니다.
Tailscale 공식 다운로드 페이지. macOS, iOS, Windows, Linux, Android 중 운영체제를 고르는 화면

Tailscale 공식 다운로드 페이지(2026년 10월 29일 화면). 2. 서버에서 아래 명령을 차례로 실행합니다. 두 번째 명령이 보여주는 주소를 PC 브라우저에서 열어 로그인하면 서버가 내 Tailscale 목록에 들어옵니다. 세 번째 명령이 Tailscale SSH를 켭니다.

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
sudo tailscale set --ssh
  1. 새 터미널 창을 열어 Tailscale 경로로 접속되는지 확인합니다. 서버 이름은 Tailscale 관리 화면의 기기 목록에서 확인할 수 있습니다.
ssh linuxuser@서버의-Tailscale-이름

서버에서 tailscale status를 실행하면 같은 목록에 묶인 기기들이 보입니다. 제 서버에서는 서버와 관리용 PC들이 함께 나왔습니다.

tailscale status 결과. 서버와 관리용 PC 여러 대가 목록에 보이고 주소는 가려져 있음
필자 서버에서 실제로 조회한 출력을 읽기 쉽게 다시 그린 화면입니다.

브라우저에서 Tailscale 관리 화면의 Machines 메뉴를 열어도 같은 목록을 볼 수 있습니다. 서버 줄에 SSH 표시가 붙어 있으면 Tailscale SSH가 켜진 것입니다.

Tailscale 관리 화면 Machines 목록. 관리용 PC 세 대와 서버 한 대가 보이고, 서버에 SSH 표시가 붙어 있음. 기기 이름과 주소는 가림
Tailscale 관리 화면(2026년 10월 29일). 기기 이름·주소·계정은 가리고 기기 종류만 적었습니다.

5단계. 비밀번호와 root 로그인 막기

이 단계부터는 지금 접속한 창을 닫지 말고, 확인은 새 창에서 합니다. 설정을 잘못하면 서버에 못 들어갈 수 있기 때문입니다.

sudo nano /etc/ssh/sshd_config.d/01-hardening.conf

열린 편집기에 아래 두 줄을 넣고 저장합니다(nano에서는 Ctrl+O, Enter, Ctrl+X).

PasswordAuthentication no
PermitRootLogin no

우분투는 이 폴더의 파일을 이름 순서로 읽고 먼저 나온 값을 씁니다. 그래서 다른 설정 파일보다 앞서도록 이름을 01-로 시작했습니다. 이어서 문법을 검사하고, 적용한 뒤, 실제 값이 바뀌었는지 확인합니다.

sudo sshd -t
sudo systemctl restart ssh.service
sudo sshd -T | grep -Ei '^(passwordauthentication|permitrootlogin)'

마지막 명령의 결과가 passwordauthentication no, permitrootlogin no면 됩니다. 새 창에서 다시 접속해 보고 문제가 없을 때만 기존 창을 닫습니다.

이 설정은 열쇠 파일로 들어오는 일반 SSH에 적용됩니다. Tailscale SSH는 Tailscale 관리 화면의 Access controls에 있는 SSH 규칙을 따릅니다. 그 규칙의 허용 계정(users)에 root가 들어 있다면, 정말 필요한지 확인하고 필요 없으면 빼 둡니다.

제 서버에서 확인한 결과입니다. 공개키 로그인 항목까지 함께 조회했습니다.

Ubuntu 24.04.5 LTS 버전과 sshd 설정 확인 결과. permitrootlogin no, pubkeyauthentication yes, passwordauthentication no
필자 서버에서 실제로 조회한 출력을 읽기 쉽게 다시 그린 화면입니다.

6단계. 인터넷 쪽 접속 통로 닫기

Tailscale로 접속되는 것을 확인했다면 인터넷 쪽 SSH 통로를 닫습니다. 이 단계는 반드시 Tailscale 이름으로 접속한 창에서 진행합니다. ufw enable을 실행하면 기존 연결이 끊길 수 있다는 확인 질문이 나오는데, y를 입력하면 됩니다. 서버 안의 방화벽(ufw)에서 Tailscale 쪽 접속만 허용합니다.

sudo ufw allow in on tailscale0 to any port 22 proto tcp
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable
sudo ufw status numbered

default deny incoming은 '목록에 없는 접속은 막는다'는 뜻이라, 예전에 만들어 둔 허용 규칙은 그대로 남습니다. 마지막 명령의 목록에 22/tcp나 OpenSSH를 어디서나(Anywhere) 허용하는 줄이 있다면 아직 인터넷 쪽 통로가 열려 있는 것입니다. 주소 체계에 따라 (v6)가 붙은 줄이 따로 나오니 둘 다 봅니다. 지울 줄이 있으면 번호로 하나씩 지우고, 지울 때마다 번호가 바뀌니 목록을 다시 확인합니다.

sudo ufw delete 번호
sudo ufw status numbered

Vultr 콘솔에서 방화벽 그룹(Firewall Group)을 쓰고 있다면 그곳의 22번 포트 규칙도 지웁니다.

마지막으로 내 PC의 새 창에서 공개 IP 주소로 접속을 시도해 봅니다. 열쇠 파일까지 똑같이 넣고, 10초 안에 연결되지 않으면 멈추게 합니다.

ssh -i ~/.ssh/my_server_key -o ConnectTimeout=10 linuxuser@서버주소
결과뜻
Connection timed out처럼 연결 자체가 안 됨인터넷 쪽 통로가 닫힘
Permission denied통로는 열려 있고 로그인만 거절됨. 아직 닫힌 것이 아니니 위 목록을 다시 확인
그대로 접속됨통로가 열려 있음

그리고 Tailscale 이름으로는 계속 접속되는지도 새 창에서 확인합니다.

ufw status numbered 결과에서 22번 포트가 tailscale0에만 허용된 두 줄
필자 서버에서 실제로 조회한 출력을 읽기 쉽게 다시 그린 화면입니다.

자주 막히는 곳

  • Tailscale로 접속할 때 브라우저 승인 화면이 뜨면, 본문에 적은 대로 그 기기를 승인한 뒤 다시 접속하면 됩니다.
  • 접속이 완전히 막혔다면 Vultr 콘솔의 서버 화면에 있는 웹 콘솔(View Console)로 들어가 설정을 되돌릴 수 있습니다.

다음 편에서는 이렇게 정리한 서버에 AI 에이전트가 일할 환경을 따로 마련한 과정을 적겠습니다.

출처

  • Tailscale, Tailscale SSH — Tailscale이 SSH 연결의 인증·권한을 관리, check mode에서 재인증 요구. 2026-10-29 확인(브라우저 재인증 세부 문구는 요약본 근거).
  • Tailscale, What is Tailscale? — 서로 다른 네트워크의 기기·서비스를 안전하게 연결하는 서비스. 2026-10-29 확인.
  • OpenBSD, ssh(1) — -i 열쇠 지정, 처음 접속 시 서버 지문(호스트 키) 확인, ConnectTimeout. 2026-10-30 확인.

연재 이어 읽기

서버 신청부터 AI 에이전트 활용까지 · 공개된 연재 전체 보기