PowerShell 원격 처리 사용하여 명령 실행하는 방법

  1. 파워셸 원격 연결이란?
  2. 파워셸에서 WinRM 리스너 구성하기
  3. 새 파워셸 세션 만들기
  4. PowerShell에서 Invoke 메서드를 사용하여 원격으로 빠르게 명령 실행하기
PowerShell 원격 처리 사용하여 명령 실행하는 방법

윈도우 파워셸을 사용하면 로컬 또는 원격 컴퓨터에서 명령을 실행하는 여러 가지 방법이 있습니다. 한 가지 방법은 파워셸 원격 연결을 활성화하고 파워셸 세션 명령을 사용하는 것입니다.

이 문서에서는 파워셀 원격 연결이 어떻게 작동하는지, WinRM 구성, 몇 가지 파워셸 세션 명령의 예, 그리고 관리자 액세스를 통해 컴퓨터에 원격으로 접속하는 방법에 대해 논의할 것입니다.

파워셸 원격 연결이란?

파워셸 원격 연결(또는 PSRemoting)은 파워셸에서 자주 사용되는 기능 중 하나입니다. 결과적으로 하나 이상의 원격 컴퓨터에 원활하게 연결하고 단일 명령을 사용하여 명령을 실행할 수 있습니다.

간단히 말해서, PSRemoting은 우리가 마치 컴퓨터 앞에 앉아 있는 것처럼 원격 컴퓨터에서 명령을 실행할 수 있도록 해줍니다. 또한 PSRemoting은 사용자를 연결하고 인증하며 원격 cmdlet을 실행하고 해당 cmdlet의 출력을 로컬 컴퓨터에 표시하는 기능을 제공합니다.

PSRemotingSSH 또는 telnet 또는 심지어 psexec와 같은 것으로 생각할 수 있습니다. 파워셸 내에서 컴퓨터에서 명령을 실행하는 방법일 뿐입니다.

PSRemoting은 세션 내에서 명령을 실행하는 데 크게 의존합니다. 세션은 내부에서 명령을 실행하는 원격 셸입니다.

이러한 세션 중 하나를 생성하는 과정은 파워셸 콘솔 백그라운드에서 많은 단계를 거칩니다.

PSRemoting 세션을 시작하면 다음과 같은 대략적인 단계가 수행됩니다.

  1. 사용자가 WinRM 리스너에 있는 대상 서버에 연결을 시도합니다. WinRM 리스너는 서버에서 실행되는 작은 웹 서비스입니다.

    WinRMWSMan이라는 구현 표준의 마이크로소프트 버전입니다. WSMan은 당시 인텔, 델, 썬 마이크로시스템즈와 같은 많은 대기업과 함께 만들어진 오픈 소스 표준입니다.

  2. 클라이언트가 HTTP 또는 HTTPS 프로토콜을 통해 리스너에 연결하면 인증 프로세스가 시작됩니다.

  3. 클라이언트가 서버에 연결하고 인증을 받은 후, PSRemoting은 세션을 생성합니다.

  4. PSRemoting이 세션을 생성한 후, 비즈니스를 시작할 수 있습니다. 클라이언트는 서버에 정보를 전송할 수 있으며, 이는 직렬화로 알려진 필요한 출력을 반환합니다.

    이 통신은 일반적으로 암호화됩니다.

PSRemoting을 활성화하려면 아래 명령을 파워셸 콘솔에 입력하세요.

Enable-PSRemoting Force

파워셸에서 WinRM 리스너 구성하기

클라이언트는 네트워크를 통해 연결할 수 있는 장소가 필요합니다. 클라이언트는 다른 쪽에서 “듣고” 있는 무언가와 “대화"할 필요가 있으며, “듣기” 부분은 WinRM 리스너의 역할입니다.

아래 winrm 명령을 사용하여 모든 윈도우 컴퓨터에서 실행되고 있는 모든 WinRM 리스너를 발견할 수 있습니다.

winrm e winrm/config/listener

WinRM 리스너는 몇 가지 필수 구성 요소가 있습니다.

  1. 수신 주소 - 클라이언트가 연결하는 서버의 IP 주소입니다.
  2. 전송 유형 - 모든 WinRM 리스너는 클라이언트와 통신하는 방법이 필요하며, 이를 위해 HTTP 또는 HTTPS를 사용하여 전송합니다.
  3. 선택적 인증서 핑거프린트 - 만약 WinRM 리스너가 HTTPS를 전송에 사용하는 경우, 클라이언트를 인증하는 데 사용할 개인 키를 알아야 하며, 이 키는 인증서 핑거프린트를 활용하여 찾습니다.

로컬 컴퓨터의 WinRM에 신뢰할 수 있는 호스트 목록에 원격 컴퓨터를 추가하려면 아래 명령을 입력하세요.

winrm s winrm/config/client '@{TrustedHosts="RemoteComputer"}'

WinRM의 구성 확인을 위해 아래 명령을 입력하세요.

winrm quickconfig

새 파워셸 세션 만들기

New-PSSession 명령은 로컬 또는 원격 컴퓨터에서 윈도우 파워셸 세션(PSSession)을 생성합니다. PSSession을 생성할 때, PowerShell은 원격 컴퓨터에 지속적인 연결을 설정합니다.

Enter-PSSession 또는 Invoke-Command–ComputerName 매개변수를 사용하여 PSSession을 생성하지 않고도 원격 컴퓨터에서 명령을 실행할 수 있습니다.

–ComputerName 매개변수를 사용할 때, 파워셸은 cmdlet에 사용된 임시 연결을 생성하고, 이후 종료됩니다.

윈도우 파워셸 6.0부터 우리는 로컬 컴퓨터에서 SSH가 활성화되어 있고 원격 컴퓨터가 윈도우 파워셸 SSH 엔드포인트로 구성되어 있는 경우, 원격 머신에서 세션을 생성하고 설정하기 위해 Secure Shell(SSH)을 사용할 수 있습니다.

SSH 기반의 윈도우 파워셸 원격 시작 세션의 이점 중 하나는 다양한 플랫폼(윈도우, 리눅스, macOS) 또는 크로스 플랫폼에서 작동할 수 있다는 것입니다.

SSH 기반 세션의 경우, -HostName 또는 -SSHConnection 매개변수를 사용하여 원격 컴퓨터 및 기타 관련 연결 정보를 지정할 수 있습니다.

New-PSSession -ComputerName DC01 -Credential (Get-Credential)

New-PSSession 명령으로 생성된 세션은 지속적이라는 것을 기억하세요. 즉, 여러 번 사용할 수 있습니다.

그러나 보안 위험을 피하기 위해 Remove-PSSession 명령을 사용하여 세션을 사용한 후 종료해야 한다는 것도 기억해야 합니다.

PowerShell에서 Invoke 메서드를 사용하여 원격으로 빠르게 명령 실행하기

Invoke-Command cmdlet은 현재 실행 중인 명령을 작성할 경우 더 바람직합니다. IDE에서 IntelliSense를 유지할 수 있기 때문입니다. 또한 Invoke-Command는 빠르고 간단하게 일회성 명령을 실행할 경우 유리합니다.

모든 Invoke 메서드의 세션은 비지속적이며 악의적인 사용자가 악용할 수 있는 세션을 유지하지 않습니다.

아래의 스니펫은 사용자 이름과 보안 문자열 비밀번호를 전달하여 관리 레벨에서 명령 실행을 가능하게 하는 Invoke-Command의 예입니다.

스크립트 샘플:

$username = "Username"
$password = "Password"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object { $secstr.AppendChar($_) }
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $secstr

Invoke-Command -ComputerName RemoteServer -ScriptBlock { Get-Process } -Credential $cred
튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn