Windows Server 2025 / WinRM과 PowerShell Remoting으로 서버를 원격 관리하는 방법
PowerShell 원격 관리는 다른 서버에 명령을 보내거나 대화형 셸로 접속하는 기능입니다. Windows Server 2025에서는 WinRM(Windows Remote Management)을 통한 접속 상태와 인증을 확인한 뒤 Enter-PSSession 또는 Invoke-Command를 사용할 수 있습니다.
콘솔과 원격 셸의 실행 위치를 구분합니다
설정 명령은 대상 FS1의 콘솔에서, 접속 명령은 관리 PC에서 실행합니다. 이 둘을 바꾸면 관리 PC에 불필요한 수신 연결을 열거나 엉뚱한 서버의 상태를 확인할 수 있습니다. 이번 예시는 Windows PowerShell의 기본 WinRM 원격 세션을 기준으로 하며 PowerShell 7의 SSH 원격 접속과 구분합니다.
- 대상 서버 FS1의 IP와 정상 관리자 계정을 확인합니다.
- 서버와 관리 PC가 통신 가능한 격리 실습망인지 확인합니다.
- 서버 콘솔을 열어 두고 네트워크 변경 실패 시 되돌릴 수 있게 합니다.
FS1 콘솔의 관리자 Windows PowerShell에서 현재 상태를 확인합니다. 원격 관리가 이미 구성돼 있을 수도 있으므로 켜져 있다고 가정하거나 무조건 다시 설정하지 않습니다.
Get-Service WinRM Get-PSSessionConfiguration Test-WSMan localhost
대상 서버에 필요한 수신 설정을 준비합니다
아직 구성되지 않았다면 대상 FS1의 관리자 Windows PowerShell에서 다음 명령을 실행합니다. 리스너·세션 구성과 방화벽 설정에 영향을 주므로 서버 이름을 먼저 확인하고 실행합니다.
hostname Enable-PSRemoting -Force Test-WSMan localhost
방화벽은 관리 PC 또는 관리망에서 필요한 접근만 허용하도록 검토합니다. Public 네트워크 조건에서 오류가 나면 네트워크 성격과 프로필을 확인하고, 오류를 무시하는 옵션이나 방화벽 전체 해제를 먼저 적용하지 않습니다. TCP 5985는 WinRM HTTP의 기본 포트이고 HTTPS의 기본 포트는 5986입니다.
HTTP라는 표기만으로 인증 후 모든 메시지가 평문이라고 단정하면 안 됩니다. 인증과 메시지 보호의 차이는 WinRM 보안 설명에서 확인할 수 있습니다. 운영 환경에서는 대상 확인과 계정 보호를 포함한 인증 설계가 필요합니다.
도메인 환경에서는 서버 이름으로 접속합니다
관리 PC와 FS1이 같은 도메인에 가입했고 DNS·시간·권한이 정상인 경우의 예시입니다. 도메인을 아직 만들지 않았다면 이 절의 명령이 바로 성공할 것을 기대하지 말고, 아래 워크그룹 조건을 확인하세요.
Test-WSMan -ComputerName 'fs1.ad.example.test' Enter-PSSession -ComputerName 'fs1.ad.example.test' hostname whoami Exit-PSSession
Enter-PSSession 이후 hostname과 whoami는 원격 서버에서 실행됩니다. Exit-PSSession 이후에는 관리 PC로 돌아옵니다. IP 주소로 접속하면 도메인 이름을 이용하는 Kerberos 인증과 조건이 달라질 수 있으므로, 정상 DNS가 있는 도메인 실습에서는 FQDN을 우선합니다.
워크그룹 실습은 신뢰 설정을 좁게 적용합니다
워크그룹이나 IP 접속은 HTTPS 또는 명시적인 TrustedHosts 설정 등 추가 조건이 필요합니다. 원격 연결 문제 해결 안내를 확인하세요. TrustedHosts는 상대 서버의 신원을 보증하는 기능이 아니므로 운영 환경에서는 신뢰한 인증서 기반 HTTPS 등을 검토합니다.
아래는 콘솔에서 대상 IP를 직접 확인한 격리 실습망용 예시입니다. 관리 PC의 관리자 Windows PowerShell에서 현재 값을 보관하고 FS1의 IP 하나만 추가합니다. 전체 호스트를 뜻하는 별표는 사용하지 않습니다. 접속 계정은 대상 서버의 실제 관리자 계정으로 바꾸세요.
$previousHosts = (Get-Item WSMan:\localhost\Client\TrustedHosts).Value
$labTargets = (@($previousHosts -split ',') + '172.24.50.20' | Where-Object { $_ } | Sort-Object -Unique) -join ','
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $labTargets
$labCredential = Get-Credential -UserName 'FS1\Administrator'
Enter-PSSession -ComputerName '172.24.50.20' -Credential $labCredential
hostname
Exit-PSSession
사용자 지정 로컬 관리자 계정은 원격 UAC 등 추가 제약을 받을 수 있습니다. 이를 피하려고 UAC 제한을 일괄 해제하지 말고 인증 설계를 다시 확인하세요. 실습 후 같은 관리 PC 세션에서 기존 값을 복원합니다. 기존 값이 비어 있었으면 항목 내용을 지웁니다.
if ([string]::IsNullOrEmpty($previousHosts)) {
Clear-Item WSMan:\localhost\Client\TrustedHosts
} else {
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $previousHosts
}
단발 명령의 결과와 연결 해제를 확인합니다
도메인 조건을 만족한 뒤 아래 명령으로 서버 OS 정보를 한 번에 받을 수 있습니다. 반환된 PSComputerName과 OS 정보를 확인하여 로컬 결과를 원격 결과로 착각하지 않도록 합니다.
Invoke-Command -ComputerName 'fs1.ad.example.test' -ScriptBlock {
Get-CimInstance Win32_OperatingSystem | Select-Object Caption,Version,LastBootUpTime
}
접속 실패는 이름 확인, 포트, WinRM 응답, 인증, 세션 실행 권한 순으로 나누어 봅니다. Test-WSMan 응답만으로 실제 명령 실행 권한이 확인되는 것은 아닙니다. 대상의 수신 설정을 실습 후 해제할 때는 다른 관리 도구가 WinRM에 의존하는지 먼저 확인하고 기존 리스너·방화벽 기록과 비교해 되돌립니다.









