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-PSSession
및 Invoke-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 서비스 설치
최신 버전의 PowerShell을 설치합니다. 자세한 내용은 Windows에 PowerShell 설치를 참조 하세요.
매개 변수 집합을 나열
New-PSSession
하여 PowerShell에 SSH 원격 지원이 있는지 확인할 수 있습니다. SSH로 시작하는 매개 변수 집합 이름이 있습니다. 이러한 매개 변수 집합에는 SSH 매개 변수가 포함됩니다.(Get-Command New-PSSession).ParameterSets.Name
Name ---- SSHHost SSHHostHashParam
최신 Win32 OpenSSH를 설치합니다. 설치 지침은 OpenSSH 시작을 참조하세요.
참고 항목
PowerShell을 OpenSSH의 기본 셸로 설정하려면 OpenSSH용 Windows 구성을 참조하세요.
에
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 키 관리를 참조 하세요.
sshd 서비스를 다시 시작합니다.
Restart-Service sshd
OpenSSH가 설치된 경로를 경로 환경 변수에 추가합니다. 예들 들어
C:\Program Files\OpenSSH\
입니다. 이 항목을 입력하면ssh.exe
를 찾을 수 있습니다.
Ubuntu Linux 컴퓨터에 SSH 서비스 설치
최신 버전의 PowerShell을 설치합니다. Ubuntu에 PowerShell 설치를 참조하세요.
Ubuntu OpenSSH 서버를 설치합니다.
sudo apt install openssh-client sudo apt install openssh-server
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
실행할 때 더 이상 매개 변수를 사용할 필요가 없습니다.ssh 서비스를 다시 시작합니다.
sudo systemctl restart sshd.service
macOS 컴퓨터에 SSH 서비스 설치
최신 버전의 PowerShell을 설치합니다. 자세한 내용은 macOS에 PowerShell을 설치합니다.
다음 단계에 따라 SSH 원격을 사용하도록 설정해야 합니다.
System Settings
을(를) 여십시오.General
를 클릭합니다.Sharing
을 클릭합니다.- 를 설정
Remote Login: On
하려면 선택합니다Remote Login
. - 적절한 사용자에 대한 액세스를 허용합니다.
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
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
.
참고 항목
PowerShell