Windows PowerShell의 원격 기능 검토
원격 기능에서는 관리용 웹 서비스(WS-Management 또는 WS-MAN)라는 개방형 표준 프로토콜을 사용합니다. 이름에서 알 수 있듯이 이 프로토콜은 웹 브라우저가 웹 서버와 통신하는 데 사용하는 동일한 HTTP 또는 HTTPS 프로토콜을 기반으로 합니다. 따라서 프로토콜을 더 쉽게 관리하고 방화벽을 통해 라우팅할 수 있습니다. Windows 운영 체제는 WinRM(Windows 원격 관리) 서비스를 사용하여 프로토콜을 구현합니다. PowerShell은 WMI, WS-Management 및 SSH(Secure Shell) 원격 기능을 지원합니다. PowerShell 6에서는 RPC(원격 프로시저 호출) 기반 통신이 지원되지 않습니다. PowerShell 7 이상에서는 RPC가 Windows에서만 지원됩니다.
나가는 연결을 시작하는 컴퓨터에는 구성이 필요하지 않지만 들어오는 연결을 수신하려는 컴퓨터에서 원격 기능을 사용하도록 설정해야 합니다. PowerShell 원격 기능은 현재 지원되는 모든 Windows Server 버전에서 들어오는 연결에 대해 기본적으로 사용하도록 설정됩니다. Windows PowerShell 3.0 이상을 실행하는 모든 컴퓨터에서 사용하도록 설정할 수도 있습니다.
참고
원격 기능은 Windows Server 운영 체제에서 기본적으로 사용하도록 설정되어 있지만 Windows 10 및 Windows 11을 포함한 클라이언트 운영 체제에서는 기본적으로 사용하도록 설정되지 않습니다.
Windows PowerShell 원격 기능에서는 다른 애플리케이션에 대한 통신을 관리할 수 있는 WinRM을 사용합니다. 예를 들어 기본 Windows Server 2016 이상 설치에서 WinRM은 64비트 Windows PowerShell, 32비트 Windows PowerShell 및 두 개의 서버 관리자 구성 요소에 대한 통신을 관리합니다.
원격 아키텍처
원격은 WinRM 서비스로 시작합니다. 각 수신기가 HTTP 또는 HTTPS를 통해 들어오는 트래픽을 수락하는 수신기를 하나 이상 등록합니다. 각 수신기를 단일 로컬 IP 주소 또는 여러 IP 주소에 바인딩할 수 있습니다. Microsoft IIS(인터넷 정보 서비스)에 대한 종속성이 없으므로 WinRM이 작동하도록 IIS를 설치할 필요가 없습니다.
들어오는 트래픽에는 트래픽의 의도된 대상 또는 엔드포인트를 나타내는 패킷 헤더가 포함됩니다. Windows PowerShell에서는 이러한 엔드포인트를 세션 구성이라고도 합니다. 각 엔드포인트는 특정 애플리케이션과 연결됩니다. 트래픽이 엔드포인트로 전달되면 WinRM은 연결된 애플리케이션을 시작하고 들어오는 트래픽을 전달한 다음, 애플리케이션이 작업을 완료할 때까지 기다립니다. 애플리케이션이 데이터를 WinRM에 다시 전달할 수 있으며 WinRM은 해당 데이터를 원래 컴퓨터로 다시 전송합니다.
Windows PowerShell 시나리오에서는 WinRM에 명령을 보낸 다음, 명령을 실행합니다. 프로세스는 원격 컴퓨터의 프로세스 목록에 Wsmprovhost로 나열됩니다. 그러면 Windows PowerShell이 해당 명령을 실행하고 결과 개체(있는 경우)를 XML로 변환합니다. 그런 다음, XML 텍스트 스트림을 WinRM에 다시 전달하여 원래 컴퓨터로 전송합니다. 원격 컴퓨터의 Windows PowerShell은 XML을 다시 정적 개체로 변환합니다. 이렇게 하면 명령 결과가 Windows PowerShell 파이프라인 내의 다른 개체와 매우 유사하게 동작할 수 있습니다.
Windows PowerShell은 WinRM에 여러 엔드포인트 또는 세션 구성을 등록할 수 있습니다. 실제로 64비트 운영 체제는 기본적으로 64비트 Windows PowerShell 호스트와 32비트 호스트 모두에 대한 엔드포인트를 등록합니다. 또한 매우 정확한 사용 권한과 기능이 할당된 사용자 지정 엔드포인트를 만들 수도 있습니다.
구성 없이 Windows PowerShell 원격 작업
많은 Windows PowerShell cmdlet에서는 데이터를 수집하고 하나 이상의 원격 컴퓨터에서 설정을 변경할 수 있는 ComputerName 매개 변수를 사용합니다. 이러한 cmdlet은 다양한 통신 프로토콜을 사용하고, 특별한 구성 없이도 모든 Windows 운영 체제에서 작동합니다.
이러한 cmdlet은 다음과 같습니다.
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
일반적으로 특별한 구성 없이 원격 작업을 지원하는 cmdlet에는 ComputerName 매개 변수는 있지만 Session 매개 변수는 없습니다.
세션에서 이러한 cmdlet을 찾으려면 다음과 같이 입력합니다.
Get-Command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}
SSH를 통한 PowerShell 원격
PowerShell 원격 기능은 일반적으로 연결 협상 및 데이터 전송에 WinRM을 사용합니다. 이제 SSH를 Linux 및 Windows 플랫폼에서 사용할 수 있으며 진정한 다중 플랫폼 PowerShell 원격 기능이 지원됩니다.
WinRM은 PowerShell 원격 세션을 위한 강력한 호스팅 모델을 제공합니다. SSH 기반 원격 기능은 원격 엔드포인트 구성 및 JEA(Just Enough Administration)를 지원하지 않습니다.
SSH 원격은 Windows 및 Linux 컴퓨터 간에 기본적인 PowerShell 세션 원격 작업을 수행할 수 있습니다. SSH 원격 기능은 대상 컴퓨터에 SSH 하위 시스템으로 PowerShell 호스트 프로세스를 만듭니다. Microsoft는 앞으로 엔드포인트 구성 및 JEA를 지원하기 위해 WinRM과 유사한 일반 호스팅 모델을 구현할 예정입니다.
참고
New-PSSession, Enter-PSSession 및 Invoke-Command에는 이제 이 새로운 원격 연결을 지원하는 새로운 매개 변수 집합이 있습니다.
SSH를 통해 PowerShell 원격을 사용하려면 모든 컴퓨터에 PowerShell 6 이상 및 SSH를 설치해야 합니다. 그런 다음, 컴퓨터와 원격으로 연결할 수 있도록 SSH 클라이언트(ssh.exe) 및 서버(sshd.exe) 실행 파일을 모두 설치해야 합니다. Windows용 OpenSSH는 Windows 10 빌드 1809 및 Windows Server 2019부터 사용할 수 있습니다. Linux의 경우 플랫폼에 적합한 SSH 버전(sshd.exe 서버 포함)을 설치합니다. 또한 SSH 원격 기능을 사용할 수 있도록 GitHub에서 현재 버전의 PowerShell을 설치해야 합니다. 원격 컴퓨터에 PowerShell 프로세스를 호스트하려면 SSH 하위 시스템을 만들도록 SSH 서버를 구성해야 합니다. 또한 암호 또는 키 기반 인증을 사용하도록 설정해야 합니다.