오래 전에는 PowerShell Remoting을 사용하여 Windows PowerShell로 연결할 수 있는 컴퓨터의 종류가 제한되었습니다. PowerShell Remoting은 WsMan 제공자만 지원하기 때문에 Linux를 실행하는 컴퓨터에 연결할 수 있는 가능성은 없었습니다. 그러나 2015년에 Microsoft는 Windows에 SSH 지원을 도입하여 다양한 잠재력을 제공하고 SSH와 PowerShell을 함께 사용할 수 있도록 허용했습니다.
이 글에서는 Windows의 SSH 클라이언트를 설정하는 방법과 SSH와 PowerShell Remoting을 활용하는 방법에 대해 알아보겠습니다.
이 SSH와 PowerShell 글은 #PS7Now 블로그 시리즈의 일부입니다. 이 글 맨 아래에서 다른 기고자들의 글도 확인해보세요.
시작하기 전에
이 글은 단계별 튜토리얼입니다. 따라하기를 원한다면 다음 사전 요구 사항을 충족하는지 확인하세요.
- Windows 10 – 모든 예제는 Windows 10 Build 1903을 사용합니다. 예제는 원격 Windows Server와 동일한 도메인에 있습니다.
- Windows 10에 설치된 PowerShell v6+ – 모든 예제는 PowerShell 7 RC2를 사용합니다.
- A remote SSH server – All examples will use a Windows Server SSH machine. If you’re connecting to a Linux machine, you can skip the server setup steps.
- 원격 서버에서 사용 가능한 TCP 포트 22
SSH 클라이언트 (Windows 10) 설정
PowerShell 콘솔을 열기 전에 Windows 10이 원격 SSH 서버에 연결할 수 있도록 SSH와 PowerShell을 함께 작동시키기 위해 일회성 작업 몇 가지를 수행해야합니다.
OpenSSH 폴더를 PATH 환경 변수에 추가하십시오.
OpenSSH는 Windows 10에 미리 설치되어 있지만 때로는 PowerShell Remoting과 함께 작동하려면 약간의 도움이 필요합니다. 예를 들어, 이미 Enter-PSSession
을 사용하여 원격 SSH 시스템에 연결하려고 시도한 경우 아래의 오류가 발생하는 경우 PATH 환경 변수에 OpenSSH 실행 파일 (ssh.exe)의 경로를 확인해야합니다.
PATH 환경 변수에 OpenSSH 폴더 경로를 추가하려면 시작 버튼을 클릭하고 고급 시스템 설정을 검색한 다음 아래에 표시된 것처럼 고급 시스템 설정 보기를 클릭하세요.

시스템 속성 창이 열리면 환경 변수 버튼을 클릭하세요.

환경 변수 창에서 시스템 변수 아래에서 Path를 선택한 다음 편집을 클릭하세요.

환경 변수 편집 창에서 새로 만들기를 클릭한 다음 ssh.exe 실행 파일이 있는 경로를 입력하세요. 이 튜토리얼에서는 경로가 C:\Program Files\OpenSSH인 것으로 표시됩니다. 입력한 후에는 새 값 저장을 위해 두 번 확인을 클릭하세요.

SSH 하위 시스템 지정
원격 Windows Server에 SSH로 연결할 때 PowerShell이 호출할 SSH 하위 시스템을 지정해야 합니다. PowerShell에 어떤 하위 시스템을 사용할지 지정하지 않으면 다음과 같은 오류가 발생할 수 있습니다:
Enter-PSSession : The background process reported an error with the following message: The SSH client session has ended with error message: subsystem request failed on channel 0.
Windows Server 기계에 연결하지 않는 경우 이 단계를 수행할 필요가 없음을 참고하세요.
원격 Windows 서버에서 C:\ProgramData\ssh\ssh_config 파일을 엽니다. no subsystems의 기본값 무시 섹션으로 이동합니다. 해당 섹션은 아래 스크린샷과 같이 보일 것입니다.

기존의 Subsystem 라인 아래에 다음 라인을 추가하여 PowerShell 서브시스템을 추가합니다.
이제 ssh_config 파일을 저장하고 원격 Windows 서버에서 sshd Windows 서비스를 다시 시작합니다. 아래에 나와 있는 것처럼.
서비스가 다시 시작되면 이제 SSH와 PowerShell을 통해 연결할 수 있습니다.
PowerShell과 SSH를 통해 연결하기
구성이 완료되었으므로 PowerShell Remoting을 테스트해 봅시다.
먼저, Enter-PSSession
cmdlet을 사용하여 대화형 세션에 들어갑니다. 일반적으로 사용하는 방법과 다르게, ComputerName
매개변수를 사용하지 않습니다. 대신, 원격 컴퓨터를 지정하기 위해 HostName
매개변수를 사용합니다.
기본적으로 PowerShell Remoting은 여전히 WsMan을 사용합니다. 기본값을 무시하려면, SSHTransport
매개변수를 사용하여 SSH 및 PowerShell을 통해 연결하려는 것을 표시합니다.
처음으로 사용자 이름과 비밀번호로 연결을 시도할 때, SSH 개인 키를 생성해야 합니다. 아래와 같이 프롬프트가 나타날 때, ‘y’를 입력하여 수락합니다.

그런 다음, 현재 로그인한 사용자의 비밀번호가 요청됩니다.
이 예제에서 Windows 10 클라이언트와 Windows Server SSH 서버는 동일한 Active Directory 도메인에 있음을 유의하세요. 기본적으로 PowerShell Remoting은 로그인한 사용자로 인증을 시도합니다. 또한
Credential
매개변수를 사용하여 다른 사용자 이름과 암호를 지정할 수도 있습니다.
암호를 입력한 후에는 익숙한 PowerShell Remoting 프롬프트에 접속하게 됩니다.

이제 exit
로 세션을 종료한 다음 New-PSSession
을 시도해보세요. 이전과 동일한 HostName
및 SSHTransport
매개변수를 사용하는 것을 아래에서 확인할 수 있습니다. 이제 Transport
가 SSH
로 표시됩니다.
SSHTransport
매개변수를 사용하지 않고 ComputerName
매개변수를 사용하여 여전히 WsMan을 전송 프로토콜로 사용할 수도 있습니다.
SSH에는 사용자 이름과 암호를 사용할 필요가 없습니다. 대신 개인 키 파일을 사용하고
KeyFilePath
매개변수를 사용하여 위치를 지정할 수 있습니다.

Get-PSSession | Remove-PSSession
으로 열린 세션을 정리하는 것을 잊지 마세요!
요약
이제 Windows 10 및 Windows Server를 사용하여 PowerShell Remoting에 SSH를 사용하는 방법을 알게 되었습니다. 구성한 후에는 전송 프로토콜로 WsMan과 SSH 간의 유일한 차이점은 몇 가지 매개변수뿐입니다!
PowerShell 및 SSH에 대해 더 알고 싶다면, PowerShell Remoting over SSH Microsoft 문서 기사를 확인해보세요.
#PS7Now 기여자
이 게시물은 PowerShell 7에 관한 시리즈의 일부로, 아래에 나열된 훌륭한 기여자들의 게시물을 확인하고 블로그에서 그들이 무슨 일을 하는지 확인하세요!
Author | Blog | |
---|---|---|
Josh King | @WindosNZ | https://toastit.dev/ |
Adam Bertram | @adbertram | https://adamtheautomator.com/ |
Jonathan Medd | @jonathanmedd | |
Thomas Lee | @doctordns | https://tfl09.blogspot.com/ |
Prateek Singh | @singhprateik | https://ridicurious.com |
Dave Carroll | @thedavecarroll | https://powershell.anovelidea.org/ |
Dan Franciscus | @dan_franciscus | https://winsysblog.com/ |
Jeff Hicks | @jeffhicks | https://jdhitsolutions.com |
Josh Duffney | @joshduffney | http://duffney.io/ |
Mike Kanakos | @MikeKanakos | https://www.networkadm.in/ |
Tommy Maynard | @thetommymaynard | https://tommymaynard.com// |