원격 PowerShell 시작 안내서

귀하의 작업 공간에서 원격 컴퓨터에서 PowerShell 명령을 실행해 보고 싶은 적이 있으신가요? PowerShell Remoting을 사용하면 가능합니다. 원격 PowerShell을 사용하면 여러 원격 시스템에서 지속 가능한 방식으로 명령 및 스크립트를 실행할 수 있습니다.

흥미로우신가요? PowerShell 방식으로 원격 컴퓨터를 다루는 방법에 대해 계속 읽어보세요.

전제 조건

이 튜토리얼은 실습을 위한 데모로 진행됩니다. 따라하려면 PowerShell 7이 설치된 적어도 세 대의 컴퓨터가 필요합니다. 하나는 관리 컴퓨터이고 나머지 두 대는 원격 컴퓨터입니다.

이 튜토리얼에서는 다음 컴퓨터를 사용합니다.

  • A Windows 10 PC with PowerShell 7 installed as the management computer. You will launch remote commands from this machine.
  • A Windows 10 PC with PowerShell 7 installed. This machine will be the endpoint for remote PowerShell over WinRM.
    • A user account on the remote Windows machine with local administrator rights. This tutorial uses a user account called ma.
  • 리눅스 머신에 SSHD를 활성화하여 원격 PowerShell 엔드포인트로 사용합니다. 이 튜토리얼에서는 Fedora 35를 사용합니다.
    • 리눅스 머신에서 원격 명령을 실행할 사용자 계정이 필요합니다. 해당 계정은 sudo 및 SSH 액세스 권한이 있어야 합니다. 이 튜토리얼에서는 test라는 계정을 사용합니다. 리눅스 머신에 계정이 없는 경우, 이 단계에서 사용자 계정을 만드세요.

Windows에서 원격 PowerShell 활성화

PowerShell 7을 설치할 때, PowerShell 원격 기능을 활성화할 수 있는 옵션이 있을 수 있습니다. 그러나 확인하기 위해 아래 단계를 따라 원격 PowerShell을 활성화하세요.

1. 원격 Windows 10 PC에 로그인하세요.

2. 관리자 권한으로 PowerShell을 엽니다.

3. 아래 명령을 실행하여 원격 PowerShell을 활성화하세요.

Enable-PSRemoting

명령은 콘솔에서 확인할 수 있는 여러 구성 변경을 실행합니다.

Enabling Remote PowerShell on Windows over WinRM

SSH를 통해 Linux에서 원격 PowerShell 사용 가능하게 하기

WinRM은 Windows 전용이므로 Linux에서 원격 PowerShell을 사용할 수 없습니다. 대신 Linux에서 SSH를 통해 원격 PowerShell을 사용할 수 있습니다. PowerShell을 이미 설치했다고 가정하고 아래 단계를 따르세요.

1. 원격 Linux 시스템에 로그인하고 터미널 세션을 엽니다.

2. SSH 서버 구성 파일을 텍스트 편집기로 엽니다. Gedit, Sublime, Nano 등 텍스트 편집기를 선택하여 사용할 수 있습니다. 이 예제에서는 Gedit을 사용합니다.

sudo nano /etc/ssh/sshd_config

3. 다음 줄을 파일에 추가합니다. 이 줄은 PowerShell 프로세스를 호스팅하는 SSH 하위 시스템을 생성합니다.

Subsystem powershell /usr/bin/pwsh -sshs -NoLogo
Create an SSH subsystem for PowerShell on Linux

4. 편집기를 닫습니다.

5. 마지막으로 다음 명령을 실행하여 SSH 서버를 다시 시작합니다.

sudo systemctl restart sshd

로컬 컴퓨터에서 원격 PowerShell 신뢰할 수 있는 호스트 추가하기

이 시점에서 원격 컴퓨터는 명령을 수신할 준비가 되었습니다. 그러나 관리 컴퓨터는 신뢰할 수 있는 호스트 목록에 없는 경우 원격 PowerShell 호스트에 연결을 거부할 수 있습니다. 장애 발생 가능성을 피하기 위해 원격 호스트를 신뢰할 수 있는 호스트 목록에 추가해야 합니다.

관리 컴퓨터에서 관리자 권한으로 PowerShell을 엽니다.

다음 winrm 명령을 실행하세요. 이 명령은 원격 Windows(192.168.8.107) 및 Linux(192.168.8.171) 컴퓨터를 컴퓨터의 신뢰할 수 있는 호스트 목록에 추가합니다.

winrm set winrm/config/client '@{TrustedHosts=" 192.168.8.171,192.168.8.107"}'
Adding remote machines as Trusted Hosts

원격 컴퓨터에서 명령 실행

모든 구성 요소가 준비되었으므로이 섹션에서 원격 컴퓨터에서 명령을 실행합니다.

1. 관리 컴퓨터에서 새 PowerShell 세션을 엽니다.

2. 이제 아래의 Invoke-Command 명령을 실행하여 사용자 ma로 원격 컴퓨터의 첫 다섯 개 서비스를 나열합니다. 다음과 같이 ScriptBlock 스위치의 중괄호 안에 실행할 명령이 나타납니다.

Invoke-Command `
    -ComputerName 192.168.8.107 `
    -Credential 'ma' `
    -ScriptBlock { Get-Process | Select-Object -First 5 }
Listing the processes on the remote PowerShell Windows host

3. 원격 Linux 호스트에서 동일한 작업을 수행하려면 대신 아래 명령을 실행하세요. -HostName-ComputerName을 대체하고, -UserName-ComputerName을 대체했음을 알 수 있습니다. 이러한 매개변수는 Invoke-Command cmdlet이 대상이 SSH 호스트임을 나타냅니다.

Invoke-Command `
    -HostName 192.168.8.171 `
    -UserName 'test' `
    -ScriptBlock { Get-Process | Select-Object -First 5 }
Listing the processes on the remote PowerShell Linux host

원격 컴퓨터에서 스크립트 실행

Invoke-Command cmdlet을 사용하여 원격 컴퓨터에서 PowerShell 스크립트 파일을 실행할 수도 있습니다. 그러나 -ScriptBlock 매개변수를 지정하는 대신 스크립트 로컬 경로 뒤에 -FilePath 매개변수를 지정해야 합니다.

1. 먼저 로컬 컴퓨터에 nametime.ps1라는 PowerShell 스크립트 파일을 생성하세요.

2. 선호하는 스크립트 편집기에서 스크립트를 열고 다음 코드를 추가하세요. 그런 다음 파일을 저장하세요.

# nametime.ps1
hostname
Get-Date
Create the PowerShell script

3. -FilePath 매개변수와 함께 Invoke-command cmdlet을 실행하세요. -FilePath는 스크립트 파일을 가리켜야 합니다. 이 예시에서는 스크립트 파일이 동일한 작업 디렉터리에 있습니다.

# 원격 서버의 PowerShell에서 스크립트 실행
Invoke-Command `
    -ComputerName 192.168.8.107 `
    -Credential 'ma' `
    -FilePath .\nametime.ps1

# SSH를 통해 원격 PowerShell에서 스크립트 실행
Invoke-Command `
    -HostName 192.168.8.171 `
    -UserName 'test' `
    -FilePath .\nametime.ps1
Invoke a script on remote PowerShell hosts

원격 컴퓨터의 대화식 관리

이전 섹션에서 원격 컴퓨터에서 개별 명령을 실행하는 방법을 확인했습니다. 이번 섹션에서는 대화식 세션을 열어 로컬인 것처럼 원격 컴퓨터에서 여러 명령을 실행하는 방법을 배웁니다.

1. Enter-PSSession 명령을 실행하여 192.168.8.107에 위치한 ma 사용자로 원격 세션을 시작하세요.

Enter-PSSession -ComputerName 192.168.8.107 -Credential ma

아래의 예시와 같이 프롬프트에서 원격 사용자 계정 암호인 ma를 입력하세요.

Entering an interactive remote session

아래의 예시와 같이 새로운 프롬프트가 나타납니다. 대괄호 안의 IP 주소는 원격 PowerShell 호스트를 나타냅니다.

Viewing a remote prompt

3. dir 명령을 사용하여 현재 작업 디렉터리의 파일을 나열하세요. 세션 내에서 원하는만큼 PowerShell 명령을 실행할 수 있습니다. dir

dir

화면에 디렉터리의 내용이 나타날 것입니다. 아래 스크린샷과 같습니다.

Linting the files on a remote machine

4. 원격 컴퓨터를 관리한 후 세션을 종료하려면 아래의 Exit-PSSession cmdlet을 실행하세요.

Exit-PSSession

종료 후에는 아래 스크린샷과 같이 로컬 프롬프트로 돌아갑니다.

Exiting a remote session

원격 PowerShell 세션 연결 해제 및 재연결

인터랙티브 세션 또는 일회성 명령 대신 세션을 영구적으로 저장할 수 있습니다. 세션을 저장하면 컨텍스트를 유지하면서 세션 간에 전환할 수 있습니다. 이 섹션에서는 영구적인 세션을 생성하고 관리하는 방법을 배우게 됩니다.

1. 원격 컴퓨터인 192.168.8.107에 대한 세션을 사용자 ma로 생성하기 위해 New-PSSession cmdlet을 실행하십시오(-Credential). 다음과 같이 세션을 $var 변수에 저장하십시오.

$var = New-PSSession -ComputerName 192.168.8.107 -Credential ma

2. 다음과 같이 변수 $var를 실행하여 해당 내용을 확인하십시오.

$var

아래에 표시된 대로, RemoteMachine ComputerTypeStateOpened로 설정된 세션 개체가 표시되어야 합니다.

Displaying the details of a session

3. Enter-PSSession 명령을 실행하여 $var에 저장된 세션에 들어가십시오.

Enter-PSSession $var

정상적으로 실행되면 아래와 같이 추가 출력 없이 원격 프롬프트로 변경됩니다.

Entering a persistent remote session

4. 세션 내에서 변수 $rem1을 생성하십시오. 원하는 변수 이름과 식별자 문자열을 사용하십시오. 나중에 동일한 세션에 연결되었는지 확인하는 데 이 변수를 사용하게 됩니다.

$rem1 = "same session"

5. 아래 명령을 실행하여 원격 PowerShell 세션을 종료하십시오.

Exit-PSSession
Disconnecting from a persistent remote session

6. 원격 PowerShell 세션을 다시 설정하십시오.

Enter-PSSession $var

7. 원격 세션 프롬프트에서 $rem1 변수를 실행하여 해당 값을 확인하십시오.

$rem1

원격 PowerShell 세션을 종료하기 전에 이전에 설정한 동일한 값이 표시되어야합니다. 이렇게하면 동일한 세션에 다시 연결되었음을 확인할 수 있습니다.

Viewing the value of a session variable

8. 다음과 같이 다시 세션을 종료하기 위해 Exit-PSSession 명령을 실행하십시오.

Exit-PSSession

9. 마지막으로, session 스위치를 $var로 설정하여 동일한 원격 세션에서 원격 컴퓨터의 호스트 이름을 표시하기 위해 Invoke-Command를 실행하십시오. 이 방법은 수동으로 연결, 연결 해제 및 단일 세션에 다시 연결하지 않고 동일한 세션에서 명령을 실행하는 대체 방법입니다.

Invoke-Command -Session $var -ScriptBlock {hostname}
Displaying the hostname of a remote machine

10. $var에 저장된 세션을 완전히 제거하기 위해 Remove-PSSession을 실행하십시오.

Remove-PSSession $var

결론

축하합니다! 이 튜토리얼의 끝에 도달하여 원격 PowerShell으로 Windows 또는 Linux 시스템을 관리하는 방법을 배웠습니다. 이 가이드는 여러분이 시작을 하기 위한 목적으로 제작되었습니다. 어떨 때는 원격 세션을 통해 Linux에서 PowerShell을 사용하는 것을 통해 더 깊이 파고들어보는 것은 어떨까요?

Source:
https://adamtheautomator.com/remote-powershell/