SSH를 통한 PowerShell 원격

개요

PowerShell 원격 기능은 일반적으로 연결 협상 및 데이터 전송에 WinRM을 사용합니다. 이제 SSH를 Linux 및 Windows 플랫폼에서 사용할 수 있으며 진정한 다중 플랫폼 PowerShell 원격 기능이 지원됩니다.

WinRM은 PowerShell 원격 세션을 위한 강력한 호스팅 모델을 제공합니다. SSH 기반 원격 기능은 원격 엔드포인트 구성 및 JEA(Just Enough Administration)를 지원하지 않습니다.

SSH 원격을 사용하면 Windows 및 Linux 컴퓨터 간에 기본 PowerShell 세션 원격 작업을 수행할 수 있습니다. SSH 원격 기능은 대상 컴퓨터에 SSH 하위 시스템으로 PowerShell 호스트 프로세스를 만듭니다. 결국 엔드포인트 구성 및 JEA를 지원하기 위해 WinRM과 유사한 일반 호스팅 모델을 구현합니다.

New-PSSession이제 , Enter-PSSessionInvoke-Command cmdlet에는 이 새 원격 연결을 지원하는 새 매개 변수 집합이 있습니다.

[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

원격 세션을 만들려면 HostName 매개 변수를 사용하여 대상 컴퓨터를 지정하고 사용자 이름에 UserName제공합니다. cmdlet을 대화형으로 실행하면 암호를 묻는 메시지가 나타납니다. KeyFilePath 매개 변수와 함께 프라이빗 키 파일을 사용하여 SSH 키 인증을 사용할 수도 있습니다. SSH 인증을 위한 키 만들기는 플랫폼에 따라 다릅니다.

일반 설정 정보

PowerShell 6 이상 및 SSH는 모든 컴퓨터에 설치해야 합니다. 컴퓨터에서 들어오고 나가는 원격 작업을 수행할 수 있도록 SSH 클라이언트(ssh.exe) 및 서버(sshd.exe)를 설치합니다. Windows용 OpenSSH는 이제 Windows 10 빌드 1809 및 Windows Server 2019에서 사용할 수 있습니다. 자세한 내용은 OpenSSH를 사용한 Windows 관리를 참조하세요. Linux의 경우 sshd 서버를 포함하여 SSH를 설치합니다. 이는 플랫폼에 적합합니다. 또한 SSH 원격 기능을 가져오려면 GitHub에서 PowerShell을 설치해야 합니다. SSH 서버는 원격 컴퓨터에 PowerShell 프로세스를 호스트하기 위해 SSH 하위 시스템을 만들도록 구성되어야 합니다. 또한 암호 또는 키 기반 인증을 사용하도록 설정해야 합니다.

Windows 컴퓨터에 SSH 서비스 설치

  1. 최신 버전의 PowerShell을 설치합니다. 자세한 내용은 Windows에 PowerShell 설치를 참조 하세요.

    매개 변수 집합을 나열 New-PSSession 하여 PowerShell에 SSH 원격 지원이 있는지 확인할 수 있습니다. SSH시작하는 매개 변수 집합 이름이 있습니다. 이러한 매개 변수 집합에는 SSH 매개 변수가 포함됩니다.

    (Get-Command New-PSSession).ParameterSets.Name
    
    Name
    ----
    SSHHost
    SSHHostHashParam
    
  2. 최신 Win32 OpenSSH를 설치합니다. 설치 지침은 OpenSSH 시작을 참조하세요.

    참고 항목

    PowerShell을 OpenSSH의 기본 셸로 설정하려면 OpenSSH용 Windows 구성을 참조하세요.

  3. sshd_config 있는 파일을 편집합니다 $env:ProgramData\ssh.

    암호 인증이 사용하도록 설정되어 있는지 확인합니다.

    PasswordAuthentication yes
    

    원격 컴퓨터에서 PowerShell 프로세스를 호스트하는 SSH 하위 시스템을 만듭니다.

    Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -nologo
    

    참고 항목

    PowerShell 7.4부터는 SSH 서버 모드에서 PowerShell을 -nologo 실행할 때 더 이상 매개 변수를 사용할 필요가 없습니다.

    참고 항목

    PowerShell 실행 파일의 기본 위치는 .입니다 c:/progra~1/powershell/7/pwsh.exe. 위치는 PowerShell을 설치한 방법에 따라 달라질 수 있습니다.

    공백이 포함된 파일 경로에는 8.3의 짧은 이름을 사용해야 합니다. 하위 시스템 실행 파일 경로의 작업에서 공백을 방지하는 Windows용 OpenSSH에 버그가 있습니다. 자세한 내용은 해당 GitHub 이슈를 참조하세요.

    Windows 폴더의 8.3 짧은 이름은 Program Files 일반적으로 Progra~1. 그러나 다음 명령을 사용하여 확인할 수 있습니다.

    Get-CimInstance Win32_Directory -Filter 'Name="C:\\Program Files"' |
      Select-Object EightDotThreeFileName
    
    EightDotThreeFileName
    ---------------------
    c:\progra~1
    

    필요에 따라 키 인증을 사용하도록 설정합니다.

    PubkeyAuthentication yes
    

    자세한 내용은 OpenSSH 키 관리를 참조 하세요.

  4. sshd 서비스를 다시 시작합니다.

    Restart-Service sshd
    
  5. OpenSSH가 설치된 경로를 경로 환경 변수에 추가합니다. 예들 들어 C:\Program Files\OpenSSH\입니다. 이 항목을 입력하면 ssh.exe를 찾을 수 있습니다.

Ubuntu Linux 컴퓨터에 SSH 서비스 설치

  1. 최신 버전의 PowerShell을 설치합니다. Ubuntu에 PowerShell 설치를 참조하세요.

  2. Ubuntu OpenSSH 서버를 설치합니다.

    sudo apt install openssh-client
    sudo apt install openssh-server
    
  3. sshd_config 위치에서 /etc/ssh파일을 편집합니다.

    암호 인증이 사용하도록 설정되어 있는지 확인합니다.

    PasswordAuthentication yes
    

    필요에 따라 키 인증을 사용하도록 설정합니다.

    PubkeyAuthentication yes
    

    Ubuntu에서 SSH 키를 만드는 방법에 대한 자세한 내용은 ssh-keygen에 대한 맨 페이지를 참조하세요.

    PowerShell 하위 시스템 항목을 추가합니다.

    Subsystem powershell /usr/bin/pwsh -sshs -nologo
    

    참고 항목

    PowerShell 실행 파일의 기본 위치는 .입니다 /usr/bin/pwsh. 위치는 PowerShell을 설치한 방법에 따라 달라질 수 있습니다.

    참고 항목

    PowerShell 7.4부터는 SSH 서버 모드에서 PowerShell을 -nologo 실행할 때 더 이상 매개 변수를 사용할 필요가 없습니다.

  4. ssh 서비스를 다시 시작합니다.

    sudo systemctl restart sshd.service
    

macOS 컴퓨터에 SSH 서비스 설치

  1. 최신 버전의 PowerShell을 설치합니다. 자세한 내용은 macOS에 PowerShell을 설치합니다.

    다음 단계에 따라 SSH 원격을 사용하도록 설정해야 합니다.

    1. System Settings을(를) 여십시오.
    2. General를 클릭합니다.
    3. Sharing을 클릭합니다.
    4. 를 설정Remote Login: On하려면 선택합니다Remote Login.
    5. 적절한 사용자에 대한 액세스를 허용합니다.
  2. sshd_config 위치에서 /private/etc/ssh/sshd_config파일을 편집합니다.

    nano와 같은 텍스트 편집기를 사용합니다.

    sudo nano /private/etc/ssh/sshd_config
    

    암호 인증이 사용하도록 설정되어 있는지 확인합니다.

    PasswordAuthentication yes
    

    PowerShell 하위 시스템 항목을 추가합니다.

    Subsystem powershell /usr/local/bin/pwsh -sshs -nologo
    

    참고 항목

    PowerShell 실행 파일의 기본 위치는 .입니다 /usr/local/bin/pwsh. 위치는 PowerShell을 설치한 방법에 따라 달라질 수 있습니다.

    참고 항목

    PowerShell 7.4부터는 SSH 서버 모드에서 PowerShell을 -nologo 실행할 때 더 이상 매개 변수를 사용할 필요가 없습니다.

    필요에 따라 키 인증을 사용하도록 설정합니다.

    PubkeyAuthentication yes
    
  3. sshd 서비스를 다시 시작합니다.

    sudo launchctl stop com.openssh.sshd
    sudo launchctl start com.openssh.sshd
    

참고 항목

운영 체제를 업그레이드할 때 SSH 구성 파일을 덮어쓸 수 있습니다. 업그레이드 후 구성 파일을 검사.

인증

SSH를 통한 PowerShell 원격 기능은 SSH 클라이언트 및 SSH 서비스 간에 인증 교환을 필요로 하며 어떤 인증 체계도 구현하지 않습니다. 그 결과 다단계 인증을 비롯한 모든 구성된 인증 체계는 SSH에서 처리하며 PowerShell과는 독립적입니다. 예를 들어 보안 강화를 위해 공개 키 인증 및 일회성 암호를 요구하도록 SSH 서비스를 구성할 수 있습니다. 다단계 인증의 구성은 이 설명서의 범위를 벗어습니다. PowerShell 원격에서 사용하기 전에 다단계 인증을 올바르게 구성하고 PowerShell 외부에서 작동하는지 확인하는 방법에 대한 SSH 설명서를 참조하세요.

참고 항목

사용자는 원격 세션에서 동일한 권한을 유지합니다. 즉, 관리 상승된 셸에 액세스할 수 있으며 일반 사용자는 액세스할 수 없습니다.

PowerShell 원격 예제

원격 기능을 테스트하는 가장 쉬운 방법은 단일 컴퓨터에서 사용해 보는 것입니다. 이 예제에서는 동일한 Linux 컴퓨터로 원격 세션을 다시 만듭니다. PowerShell cmdlet을 대화형으로 사용하므로 호스트 컴퓨터를 확인하고 암호를 묻는 SSH의 프롬프트가 표시됩니다. Windows 컴퓨터에서 동일한 작업을 수행하여 원격 작업이 작동하는지 확인할 수 있습니다. 그런 다음 호스트 이름을 변경하여 컴퓨터 간에 원격으로 연결합니다.

Linux에서 Linux로

$session = New-PSSession -HostName UbuntuVM1 -UserName TestUser
The authenticity of host 'UbuntuVM1 (9.129.17.107)' can't be established.
ECDSA key fingerprint is SHA256:2kCbnhT2dUE6WCGgVJ8Hyfu1z2wE4lifaJXLO7QJy0Y.
Are you sure you want to continue connecting (yes/no)?
TestUser@UbuntuVM1s password:
$session
 Id Name   ComputerName    ComputerType    State    ConfigurationName     Availability
 -- ----   ------------    ------------    -----    -----------------     ------------
  1 SSH1   UbuntuVM1       RemoteMachine   Opened   DefaultShell             Available
Enter-PSSession $session
[UbuntuVM1]: PS /home/TestUser> uname -a
Linux TestUser-UbuntuVM1 4.2.0-42-generic 49~16.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

[UbuntuVM1]: PS /home/TestUser> Exit-PSSession
Invoke-Command $session -ScriptBlock { Get-Process pwsh }
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName    PSComputerName
-------  ------    -----      -----     ------     --  -- -----------    --------------
      0       0        0         19       3.23  10635 635 pwsh           UbuntuVM1
      0       0        0         21       4.92  11033 017 pwsh           UbuntuVM1
      0       0        0         20       3.07  11076 076 pwsh           UbuntuVM1

Linux에서 Windows로

Enter-PSSession -HostName WinVM1 -UserName PTestName
PTestName@WinVM1s password:
[WinVM1]: PS C:\Users\PTestName\Documents> cmd /c ver
Microsoft Windows [Version 10.0.10586]

Windows에서 Windows로

C:\Users\PSUser\Documents>pwsh.exe
PowerShell
Copyright (c) Microsoft Corporation. All rights reserved.
$session = New-PSSession -HostName WinVM2 -UserName PSRemoteUser
The authenticity of host 'WinVM2 (10.13.37.3)' can't be established.
ECDSA key fingerprint is SHA256:kSU6slAROyQVMEynVIXAdxSiZpwDBigpAF/TXjjWjmw.
Are you sure you want to continue connecting (yes/no)?
Warning: Permanently added 'WinVM2,10.13.37.3' (ECDSA) to the list of known hosts.
PSRemoteUser@WinVM2's password:
$session
 Id Name            ComputerName    ComputerType    State         ConfigurationName     Availability
 -- ----            ------------    ------------    -----         -----------------     ------------
  1 SSH1            WinVM2          RemoteMachine   Opened        DefaultShell             Available
Enter-PSSession -Session $session
[WinVM2]: PS C:\Users\PSRemoteUser\Documents> $PSVersionTable

Name                           Value
----                           -----
PSEdition                      Core
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
SerializationVersion           1.1.0.1
BuildVersion                   3.0.0.0
CLRVersion
PSVersion                      6.0.0-alpha
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
GitCommitId                    v6.0.0-alpha.17


[WinVM2]: PS C:\Users\PSRemoteUser\Documents>

제한 사항

  • sudo 명령은 Linux 컴퓨터에 대한 원격 세션에서 작동하지 않습니다.

  • SSH를 통해 PSRemoting은 프로필을 지원하지 않으며 에 대한 액세스 권한이 $PROFILE없습니다. 세션에 있을 때 전체 파일 경로를 사용하여 프로필을 도트 소싱하여 프로필을 로드할 수 있습니다. 이는 SSH 프로필과 관련이 없습니다. PowerShell을 기본 셸로 사용하고 SSH를 통해 프로필을 로드하도록 SSH 서버를 구성할 수 있습니다. 자세한 내용은 SSH 설명서를 참조하세요.

  • PowerShell 7.1 이전에는 SSH를 통해 원격으로 이동하여 두 번째 홉 원격 세션을 지원하지 않았습니다. 해당 기능은 WinRM을 사용하는 세션으로 제한되었습니다. PowerShell 7.1을 Enter-PSSession 사용하면 대화형 원격 세션 내에서 작업할 수 있습니다 Enter-PSHostProcess .

참고 항목