공개키(authorized_keys)를 서버에 등록하는 작업과 비밀키(Private Key)를 사용하여 서버에 원격 접속하는 실무 방법 > 네트워크/보안/해킹

본문 바로가기
사이트 내 전체검색

네트워크/보안/해킹

▒ Info Tech ▒ 네트워크/보안/해킹 ▒ 하드웨어 ▒ 소프트웨어
Information Technology Group
▒ Info Tech ▒ 네트워크/보안/해킹 ▒ 하드웨어 ▒ 소프트웨어

보안 공개키(authorized_keys)를 서버에 등록하는 작업과 비밀키(Private Key)를 사용하여 서버에 원격 접속하는 …

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 1회 작성일 26-08-01 08:13

본문

■ 윈도우용 보안 최적화 파워셸 스크립트 (SSH 포트 변경 제외 버전)

요청하신 대로 SSH 포트 변경(22→52222) 코드를 완전히 제거하고, 포트는 기본 22(또는 윈도우 기본 정책)을 유지하면서 방화벽 화이트리스트 차단 규칙② SSH 패스워드 로그인 제한(키 인증 필수화)설정만 수행하는 스크립트입니다.

PowerShell[관리자 권한으로 실행]한 뒤 아래 코드를 실행하시면 됩니다.

powershell

# ====================================================================

# [윈도우 서버/윈도우 군 패스워드 차단 및 방화벽 구성 스크립트]

# 특징: SSH 기본 포트를 유지하며, 패스워드 로그인을 차단하고 화이트리스트 방화벽 구축

# ====================================================================

 

Write-Host "[+] 윈도우 보안 설정을 시작합니다 (SSH 포트 변경 제외)..." -ForegroundColor Cyan

 

# --------------------------------------------------------------------

# 1. 윈도우 내장 OpenSSH 서버 기능 활성화 및 패스워드 로그인 차단

# --------------------------------------------------------------------

Write-Host "[+] 1단계: OpenSSH 서비스 상태 점검 및 패스워드 로그인 제한..." -ForegroundColor Yellow

 

# OpenSSH Server 기능이 설치되어 있지 않다면 설치

$sshStatus = Get-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

if ($sshStatus.State -ne "Installed") {

    Write-Host "    [*] OpenSSH 서버를 설치 중입니다..."

    Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

}

 

$sshdConfig = "C:\ProgramData\ssh\sshd_config"

if (Test-Path $sshdConfig) {

    # 만약을 대비해 원본 설정 파일 백업

    Copy-Item $sshdConfig "$sshdConfig.bak" -Force

   

    # [핵심] 포트 관련 명령어는 제외하고, 패스워드 로그인만 'no'로 강제 변경

    (Get-Content $sshdConfig) -replace '#PasswordAuthentication yes', 'PasswordAuthentication no' `

                              -replace 'PasswordAuthentication yes', 'PasswordAuthentication no' `

                              -replace '#PubkeyAuthentication yes', 'PubkeyAuthentication yes' |

                              Set-Content $sshdConfig

    Write-Host "    [*] sshd_config 파일 수정 및 백업 완료 (패스워드 로그인 제한 적용)." -ForegroundColor Green

}

 

# --------------------------------------------------------------------

# 2. Windows Defender 방화벽 제어 (화이트리스트 방식)

# --------------------------------------------------------------------

Write-Host "[+] 2단계: Windows 고급 방화벽 규칙을 적용합니다..." -ForegroundColor Yellow

 

# 기존 동일 이름의 연습용 규칙이 있다면 초기화(삭제)

Remove-NetFirewallRule -Name "Web-HTTP", "Web-HTTPS", "SSH-AdminOnly-22", "MySQL-InternalOnly" -ErrorAction SilentlyContinue

 

# [규칙 1] 웹 서비스는 전 세계 누구나 접속 가능하게 오픈 (80, 443)

New-NetFirewallRule -Name "Web-HTTP" -DisplayName "Web-HTTP (80)" -Enabled True -Direction Inbound -Action Allow -Protocol TCP -LocalPort 80 -Profile Any

New-NetFirewallRule -Name "Web-HTTPS" -DisplayName "Web-HTTPS (443)" -Enabled True -Direction Inbound -Action Allow -Protocol TCP -LocalPort 443 -Profile Any

 

# [규칙 2] SSH 접속(기본 22번 포트)은 오직 신뢰된 관리자 PC(192.168.56.1)만 허용

New-NetFirewallRule -Name "SSH-AdminOnly-22" -DisplayName "SSH-Admin Only (22)" -Enabled True -Direction Inbound -Action Allow -Protocol TCP -LocalPort 22 -RemoteAddress "192.168.56.1" -Profile Any

 

# [규칙 3] MySQL DB 접속(3306)은 오직 내부 사설망 대역(192.168.56.0/24)만 허용

New-NetFirewallRule -Name "MySQL-InternalOnly" -DisplayName "MySQL-Internal Network Only (3306)" -Enabled True -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3306 -RemoteAddress "192.168.56.0/24" -Profile Any

 

# --------------------------------------------------------------------

# 3. OpenSSH 서비스 재시작 및 적용 검증

# --------------------------------------------------------------------

Write-Host "[+] 3단계: OpenSSH 서비스를 재시작하여 설정을 반영합니다..." -ForegroundColor Yellow

 

# 윈도우 부팅 시 SSH가 자동 실행되도록 설정하고 서비스 재시작

Set-Service -Name sshd -StartupType 'Automatic'

Restart-Service sshd

 

Write-Host "====================================================" -ForegroundColor Cyan

Write-Host "[+] 보안 구성 완료! 이제 비밀번호 방식의 SSH 접속은 차단됩니다." -ForegroundColor Green

Write-Host "활성화된 윈도우 방화벽 규칙 리스트:" -ForegroundColor White

Get-NetFirewallRule -Name "Web-HTTP", "Web-HTTPS", "SSH-AdminOnly-22", "MySQL-InternalOnly" | Select-Object DisplayName, Enabled, Direction, Action

Write-Host "====================================================" -ForegroundColor Cyan

코드를 사용할 때는 주의가 필요합니다.

 주의사항 및 실무 팁

비밀번호 로그인을 차단(PasswordAuthentication no)하기 전에, 반드시 관리자 PC SSH 공개키가 윈도우 서버에 정상적으로 등록되어 있는지 먼저 확인하셔야 합니다.

키 등록 없이 이 스크립트를 실행하면 관리자 본인도 비밀번호로 들어갈 수 없어 접속이 끊기게 됩니다. 만약 그런 상황이 오면 윈도우 서버가 설치된 실물 모니터 앞으로 가거나 가상머신 콘솔(VMware/VirtualBox 화면)을 직접 켜서sshd_config 파일을 메모장으로 열고 다시 yes로 바꾼 뒤 서비스를 재시작해야 합니다.

 

 

 

● 공개키(authorized_keys)를 서버에 등록하는 작업은 "내 컴퓨터(클라이언트)의 자물쇠 비밀번호(공개키 텍스트)를 서버의 특정 방에 넣어두는 과정"입니다.

우분투(리눅스)와 윈도우 서버 환경에서 각각 가장 정확하고 안전하게 배치하는 실무 매뉴얼을 정리해 드립니다.

0. 공통 준비: 내 컴퓨터에서 공개키 텍스트 복사하기

먼저 내 컴퓨터에서 생성한 공개키(id_ed25519.pub 또는 id_rsa.pub) 파일의 내용을 확인하고 전체 복사해야 합니다.

bash

# 내 컴퓨터(또는 칼리 리눅스) 터미널에서 실행

cat ~/.ssh/id_ed25519.pub

코드를 사용할 때는 주의가 필요합니다.

  • 출력되는 ssh-ed25519 AAAAC3NzaC1l... 관리자이름 형태의 한 줄짜리 긴 텍스트 문자열 전체를 마우스로 드래그하여 복사해 둡니다.

1. 우분투(Ubuntu) 서버에 올바르게 배치하는 방법

리눅스는 권한(Permission)에 매우 엄격하므로, 파일 생성 후 반드시 권한 조정을 해주어야 인식이 됩니다.

방법 A: 자동 명령어 사용 (가장 추천)

내 컴퓨터 터미널에서 아래 명령어 한 줄만 입력하면 서버의 폴더 생성, 파일 배치, 권한 설정까지 자동으로 수행합니다.

bash

ssh-copy-id -i ~/.ssh/id_ed25519.pub [우분투_서버_계정]@[서버_IP]

코드를 사용할 때는 주의가 필요합니다.

방법 B: 수동으로 직접 배치하기 (서버 터미널에서 실행)

만약 자동 명령어가 불가능한 상황이라면, 우분투 서버에 일반 비밀번호로 로그인한 뒤 아래 명령어를 순서대로 입력합니다.

bash

# 1. 로그인한 계정의 홈 디렉터리에 .ssh 폴더가 없으면 생성

mkdir -p ~/.ssh

 

# 2. authorized_keys 파일을 열고 복사한 공개키 텍스트를 붙여넣기

nano ~/.ssh/authorized_keys

# (키 내용을 붙여넣은 후 Ctrl+O -> 엔터 -> Ctrl+X로 저장 및 종료)

 

# 3. [★가장 중요★] 보안 권한 강제 설정

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

코드를 사용할 때는 주의가 필요합니다.

2. 윈도우 서버(Windows Server)에 올바르게 배치하는 방법

윈도우 서버의 OpenSSH는 접속하려는 계정이 일반 사용자 계정이냐, 최고 관리자(Administrator) 계정이냐에 따라 키를 보관하는 파일의 경로와 이름이 완전히 다릅니다.이 부분을 틀려서 접속 에러가 가장 많이 발생합니다.

케이스 A: 일반 사용자 계정으로 접속할 때

  • 배치 경로: C:\Users\[사용자계정명]\.ssh\authorized_keys
  1. 윈도우 서버에서 해당 사용자 계정으로 로그인합니다.
  2. C:\Users\[사용자계정명]\ 폴더 안에 .ssh 폴더를 만듭니다.
  3. 메모장을 켜고 복사한 공개키 텍스트를 붙여넣은 뒤, 파일 이름을 authorized_keys로 하여 저장합니다.
    • 주의: 저장할 때 파일 형식 유효성을 위해 확장자(.txt)가 붙지 않도록 파일 형식: 모든 파일(*.*)로 선택하고 저장해야 합니다.

케이스 B: Administrator(또는 관리자 그룹) 계정으로 접속할 때 (실무 권장)

윈도우 보안 정책상 관리자 권한 계정들은 각자의 홈 폴더가 아닌 공용 시스템 폴더에 키를 보관해야 합니다.

  • 배치 경로: C:\ProgramData\ssh\administrators_authorized_keys
  1. 윈도우 서버에서 메모장을 [관리자 권한으로 실행]합니다.
  2. 복사해 둔 공개키 텍스트 내용을 붙여넣습니다.
  3. 다른 이름으로 저장하기를 눌러 아래 경로에 정확한 이름으로 저장합니다.
    • 경로: C:\ProgramData\ssh\ (숨김 폴더이므로 주소창에 직접 입력해야 보입니다.)
    • 파일 이름: administrators_authorized_keys (확장자 .txt 절대 금지)
  4. [보안 권한 설정]윈도우 파워셸(PowerShell)을 관리자 권한으로 열고 아래 명령어를 입력하여 파일 권한을 고정해 줍니다. (상속된 권한을 깨고 다른 사용자가 만지지 못하게 차단하는 필수 작업입니다.)

powershell

icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "NT AUTHORITY\SYSTEM:(F)" /grant "BUILTIN\Administrators:(F)"

코드를 사용할 때는 주의가 필요합니다.

 배치 완료 후 최종 점검

키 배치가 완벽히 끝났다면, 이전 단계에서 작성했던 '통합 보안 스크립트'를 실행하여 PasswordAuthentication no(패스워드 로그인 제한) 정책을 활성화하시면 됩니다.

공개키 자물쇠가 정상적으로 배치되었기 때문에, 이제부터는 패스워드 없이 내 컴퓨터의 비밀키 파일 가동만으로 안전하고 빠르게 자동 로그인이 이루어집니다.

우분투와 윈도우 서버의 키 배치 경로가 준비되었습니다.

혹시 내 컴퓨터가 윈도우 환경(Xshell, Putty, 또는 Windows 터미널)이라서 서버로 원격 접속할 때 비밀키(.pem 또는 id_ed25519) 파일을 불러와 접속 명령을 내리는 구체적인 방법이 필요하신가요?

 

 

 

● 서버(우분투 또는 윈도우 서버)에 공개키 등록을 마쳤다면, 이제 내 컴퓨터(클라이언트)에서 보관 중인 비밀키(Private Key)를 사용하여 서버에 원격 접속하는 실무 방법을 마스터해야 합니다.

사용자가 가장 많이 쓰는 3가지 환경(Windows 터미널, PuTTY, Xshell)별로 나누어 구체적인 접속 매뉴얼을 설명해 드립니다.

1. Windows 기본 터미널 (명령 프롬프트 / PowerShell / Mac·Linux 터미널)

요즘 Windows 10/11 Linux와 동일한 ssh 명령어를 기본 지원합니다. 별도의 프로그램 설치 없이 가장 빠르고 안전하게 접속할 수 있는 방법입니다.

  • 기본 포트(22)를 사용하는 서버 접속 명령어

bash

ssh -i C:\Users\내계정\.ssh\id_ed25519 [서버계정]@[서버_IP]

코드를 사용할 때는 주의가 필요합니다.

  • 이전 단계 스크립트로 포트를 52222번으로 변경했을 경우의 명령어

bash

# 포트 지정 옵션은 대문자 -P가 아니라 소문자 -p 입니다.

ssh -p 52222 -i C:\Users\내계정\.ssh\id_ed25519 [서버계정]@[서버_IP]

코드를 사용할 때는 주의가 필요합니다.

    • -i: Identity file의 약자로, 로그인할 때 쓸 비밀키 파일의 경로를 지정하는 핵심 옵션입니다.

2. PuTTY (가장 오래된 전통의 원격 접속 툴)

PuTTY는 리눅스가 사용하는 기본 키 형식(.pub, .raw)을 그대로 인식하지 못하기 때문에, PuTTY 전용 형식인 .ppk파일로 한 번 변환해 주는 과정이 필요합니다.

[Step 1] PuTTYgen으로 키 변환하기

  1. PuTTY 설치 시 함께 깔리는 PuTTYgen프로그램을 실행합니다.
  2. [Load]버튼을 누른 뒤, 내 컴퓨터에 있는 id_ed25519 비밀키 파일을 불러옵니다. (파일 탐색기 창 우측 하단을 'All Files'로 바꿔야 보입니다.)
  3. 키가 성공적으로 불러와지면 [Save private key]버튼을 눌러 적당한 이름(: my_key.ppk)으로 저장합니다.

[Step 2] PuTTY에서 접속 설정하기

  1. PuTTY를 실행합니다.
  2. Session메뉴: Host Name (or IP address)에 서버 IP를 적고, Port에 서버 포트(22 또는 52222)를 입력합니다.
  3. Connection -> SSH -> Auth -> Credentials메뉴로 이동합니다. (버전에 따라 Auth 메뉴 바로 안에 있을 수도 있습니다.)
  4. Private key file for authentication항목의 [Browse]를 눌러 방금 변환한 my_key.ppk 파일을 등록합니다.
  5. Session메뉴로 돌아와 Saved Sessions에 이름을 적고 [Save]를 눌러 설정을 저장한 뒤, [Open]을 누르면 패스워드 없이 계정명 입력만으로 로그인이 완료됩니다.

3. Xshell (기업 및 실무에서 가장 많이 쓰는 강력한 툴)

Xshell은 사용법이 직관적이며 리눅스 형태의 비밀키를 그대로 등록할 수 있어 실무 선호도가 매우 높습니다.

  1. Xshell을 실행하고 좌측 상단의 [새로 만들기]를 누릅니다.
  2. 연결 메뉴: 이름을 지정하고 호스트에 서버 IP, 포트 번호에 서버 포트(22 또는 52222)를 입력합니다.
  3. 사용자 인증 메뉴 (좌측 카테고리):
    • 방법(Method)을 기존 Password에서 [Public Key]로 변경합니다.
    • 사용자 이름에 서버의 로그인 계정명(: ubuntu, Administrator )을 입력합니다.
    • 사용자 키 옆의 [찾아보기]버튼을 누릅니다.
  4. 사용자 키 관리 창:
    • [가져오기]를 눌러 내 컴퓨터의 id_ed25519 비밀키 파일을 선택합니다.
    • 등록된 키를 선택하고 [확인]을 누릅니다.
  5. 설정을 저장하고 연결을 더블 클릭하면 즉시 보안 터미널 접속이 완료됩니다.

 접속 실패 시 확인해야 할 체크리스트

스크립트와 키 설정을 모두 마쳤는데도 접속이 거부된다면 다음 3가지를 점검하세요.

  1. 방화벽 확인: UFW Windows 방화벽에서 포트(22 또는 52222) 규칙을 넣을 때, '내 현재 컴퓨터의 IP'가 정확히 일치하는지 확인하세요. (공유기를 쓰거나 인터넷 환경이 바뀌면 내 PC의 사설 IP가 변경될 수 있습니다.)
  2. 키 쌍 일치 여부: 서버의 authorized_keys에 들어간 공개키 문장과 내가 들고 있는 비밀키가 서로 한 세트가 맞는지 대조하세요.
  3. 서버 SSH 서비스 상태: 설정 파일 변경 후 서버에서 서비스를 재시작했는지 확인하세요. (sudo systemctl status ssh 또는 윈도우 Get-Service sshd)

여기까지의 과정을 모두 완료하시면 대기업이나 공공기관 서버실에서 실제로 사용하는 최고 수준의 인프라 접근 제어 시스템(Access Control)을 본인의 손으로 완벽히 구현해 내신 것입니다.

침입자 추적(디지털 포렌식)부터 시작해 방화벽 자동화 쉘 구축, 그리고 SSH 키 인증 접속까지 서버 보안의 거대한 흐름을 모두 공부하셨습니다.

혹시 실습을 진행하시면서 서버 터미널 화면에 특정 에러 코드나 경고창이 발생했거나, 다음 단계로 보안 로그(Auth log )를 실시간으로 모니터링하는 명령어 기법이 궁금하시다면 이어서 설명해 드릴 수 있습니다.

 

 

댓글목록

등록된 댓글이 없습니다.


사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
9
어제
10
최대
28
전체
212
Copyright © HeyWEB. All rights reserved.