Windows 10 네이티브 방식으로 SSH와 Git 클라이언트 설정하기

남정현
남정현
Oct 22 · 10 min read
Image Credit: https://unsplash.com/photos/0qvBNep1Y04
Image Credit: https://unsplash.com/photos/0qvBNep1Y04
Image Credit: https://unsplash.com/photos/0qvBNep1Y04

The English version of this article is posted on dev.to.

SSH 서버 설정에 대한 글도 업데이트하였습니다.

Windows 10에 OpenSSH 클라이언트가 제공된다는 사실, 알고 계셨나요?

Windows 10 Fall Creators Update (1709)부터는 OpenSSH 클라이언트가 Windows 부가 기능으로 제공되기 시작하고 있습니다. 하지만 리눅스와는 많이 다른 생소한 사용법 때문에 제공이 된다는 사실만 알고 있거나, 여전히 제대로 지원이 안된다고 오해하기 쉽습니다.

이번 아티클에서는 흔히 사용하는 OpenSSH에 관련된 클라이언트 환경 설정 방법을 Windows 10이 기본으로 제공하는 방식으로 설정하는 방법을 살펴보고, 여기에 더하여 몇 가지 유용한 팁을 드리려고 합니다.

Windows OpenSSH 구성하기

관리자 권한으로 PowerShell 시작 후 Windows 구성 요소 추가를 위하여 아래 PowerShell 명령어를 사용합니다.

지금 설치할 마이크로소프트에서 제공하는 OpenSSH는 흔히 사용하는 클래식 제어판 control.exeWindows 구성 요소 추가/제거 대화 상자에 나오는 항목이 아닌 Feature-On-Demand 스타일의 추가 패키지이므로 설정 앱선택적 기능 메뉴를 이용하거나 아래의 명령어를 사용해야만 설치할 수 있습니다.

$OpenSSHClient = Get-WindowsCapability -Online | ? Name -like ‘OpenSSH.Client*’Add-WindowsCapability -Online -Name $OpenSSHClient.Name

보통의 경우 설치 후 시스템 재시작은 필요하지 않습니다.

설치를 완료한 후,ssh-agent 서비스를 활성화해야 합니다. 이 서비스는 SSH 키의 비밀 번호를 매번 묻지 않도록 등록하기 위하여 사용됩니다. 처음에는 서비스가 비활성화 되어있고, 정지되어있으므로 서비스가 자동 시작되도록 설정하고, 지금 시작하도록 만듭니다.

$SSHAgentSvc = Get-Service -Name ‘ssh-agent’
Set-Service -Name $SSHAgentSvc.Name -StartupType Automatic
Start-Service -Name $SSHAgentSvc.Name

이제 관리자 모드의 PowerShell 창은 닫고, 일반 권한의 PowerShell 창을 열어 작업해야 합니다.

시스템을 새로 설정하는 것이므로, 새로운 SSH 키를 만들어보겠습니다. OpenSSH 클라이언트 패키지와 함께 자주 쓰이는 유틸리티도 같이 추가되었습니다. ssh-keygen 명령어를 실행하여, 순서대로 응답합니다.

ssh-keygen

그러면 $HOME\.ssh\id_rsa 파일과 $HOME\.ssh\id_rsa.pub 파일로 Key Pair가 만들어지게 됩니다.

이제 이 Key Pair를 ssh-agent 서비스에 추가하기 위하여 ssh-add 명령어를 실행합니다.

ssh-add

자동으로 $HOME\.ssh\id_rsa Key Pair를 등록하게 되며, 이제부터 해당 Key Pair로 인증을 할 수 있게 되었습니다.

노트: 간혹 시스템에 여러가지 ssh.exe 바이너리 파일이 설치되고, PATH 환경 변수에 중복으로 ssh.exe 바이너리 경로가 지정되는 일이 있습니다. 이 문제를 디버깅하려면 path 명령어 또는 PATH 환경 변수의 내용을 검토하여 실제로 사용할 ssh.exe 바이너리가 있는 폴더 경로를 제일 먼저 등장시키거나, 단 하나만 유지하도록 변경합니다.

Github에 SSH 키 등록하기

이렇게 만든 SSH Key Pair의 Public Key를 Github 또는 여러분이 사용하는 Git 리포지터리에 등록해야 합니다.

다른 시스템에 알릴 Public Key 값을 복사하기 위하여 다음의 PowerShell 명령어를 입력합니다.

Get-Content -Path $HOME\.ssh\id_rsa.pub | Set-Clipboard

그러면 클립보드에 자동으로 텍스트가 입력됩니다.

그 다음 GitHub 설정 페이지를 열기 위하여 아래와 같이 명령어를 입력합니다. (또는 기본 브라우저 대신 여러분이 원하는 브라우저로 아래 URL을 직접 열어도 됩니다.)

Start-Process ‘https://github.com/settings/ssh/new'

그 후 클립보드에 들어있는 Public Key를 붙여넣고, Key에 대한 알기 쉬운 설명을 추가하여 등록합니다.

Git 클라이언트 설치하고 SSH 연동하기

Git 클라이언트를 설치하는 방법은 여러 가지가 있지만, 가장 직관적이고 쉬운 방법으로는 Chocolatey Package Manager를 이용하는 것을 개인적으로 추천합니다.

공식 Git 클라이언트 설치 패키지의 경우, Side Effect를 일으킬 수 있는 옵션들을 많이 노출하기 때문에, 잘못 설치할 경우 의도하지 않은 기능들 때문에 어려움을 겪을 수 있다고 생각합니다.

우선 Chocolatey Package Manager가 설치되어있지 않으면 설치하도록 합니다. 시스템 수준의 소프트웨어 추가 과정이므로 잠시 관리자 권한으로 PowerShell 창을 새로 열도록 합니다.

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1'))

이제 Git for Windows 클라이언트를 설치하는 명령어를 입력합니다.

종종 Chocolatey.org 웹 사이트가 정기 점검 기간에 들어가는 경우, 설치가 제대로 진행되지 않을 수 있습니다. 이 경우 Chocolatey.org 웹 사이트에서 상태를 확인한 후 나중에 다시 시도하도록 합니다.

choco install git -y

다시 일반 PowerShell 창으로 돌아와서, GIT_SSH 환경 변수를 설정합니다. 이 환경 변수를 지정해야 Git 클라이언트가 Windows 10의 SSH 클라이언트를 제대로 인식할 수 있습니다.

$SSHPath = (Get-Command -Name ‘ssh.exe’).Source
[Environment]::SetEnvironmentVariable(‘GIT_SSH’, $SSHPath, ‘User’)

oh-my-posh로 PowerShell 기능 강화하기

이름에서 알 수 있듯이, oh-my-posh는 요즈음 macOS와 Linux에서 유행하는 oh-my-zsh의 Windows PowerShell 버전입니다. 그리고 흥미롭게도 oh-my-zsh가 제공하는 기능 중에서도 특징적인 기능들을 잘 지원합니다.

우선 oh-my-posh 설치 스크립트를 실행합니다. PowerShell의 공식 모듈 리포지터리에 올라와있으므로 명령어가 복잡하지 않고 간단합니다.

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

만약 Windows용 PowerShell Core (6.x 이상)에서 설치하는 경우에만 아래 명령을 추가로 실행하도록 합니다.

Install-Module -Name PSReadLine -AllowPrerelease -Scope CurrentUser -Force -SkipPublisherCheck

PowerShell 시작 시 자동으로 oh-my-posh 셸을 로드할 수 있게 하기 위하여 Profile 파일 편집합니다. 아래 명령을 실행하면, 파일이 없을 경우 새로 만들어주는 동작까지 처리합니다.

if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }notepad.exe $PROFILE

스크립트의 제일 마지막에 다음의 코드를 추가하고 저장합니다.

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox

부수적으로 Powerline 패치가 적용된 프로그래밍 폰트를 사용하는 것이 모양이 예쁘고 글리프 부분이 깨지지 않습니다. 아래 명령어를 관리자 권한의 PowerShell에서 다시 실행하고, 콘솔 창의 글꼴 설정을 D2Coding 폰트로 업데이트합니다.

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox

모든 설정이 적용되면 아래 그림과 같이 나타나며, Git 리포지터리로 디렉터리를 이동하면 브랜치 이름까지 잘 보이는 것을 확인할 수 있습니다. 이 정도면 어느 정도 구색이 갖추어진 것 같네요. 😎

부록 1: Windows Terminal 앱 설치하기

PowerShell에서 다음 명령어를 실행하여 Windows Terminal 앱 스토어 페이지로 바로 갈 수 있습니다. 익히 알려진대로 Windows Terminal을 사용하면 모던 CLI 개발 환경의 이점을 모두 누릴 수 있게 됩니다.

Start-Process 'https://www.microsoft.com/store/productId/9N0DX20HK701'

설치한 후에는 wt.exe 또는 wt 단축어로 Windows Terminal 앱을 바로 띄울 수 있습니다. 즉 Windows에서는 cmd, powershell, pwsh 대신 wt를 기억하시면 되겠습니다. 😏

부록 2: SourceTree의 경우

아쉽게도 SourceTree가 사용하는 Git 클라이언트는 Windows가 제공하는 SSH Agent 서비스와 연동되지 않습니다. 대신, 만들어놓은 키를 활용할 수는 있습니다.

아래 그림과 같이 SourceTree 옵션 창에서 SSH 클라이언트OpenSSH로 변경합니다.

SourceTree에서 SSH 설정하기

이 때 SSH 키가 앞 단계에서 만든 $HOME\.ssh\id_rsa 파일과 동일하게 지정되었는지 확인합니다. 다르면 정확하게 다시 지정합니다.

설정을 완료하였으면 확인 버튼을 눌러 설정을 저장합니다.

부록 3: Visual Studio Code와 연동하기

GIT_SSH 환경 변수를 제대로 등록했다면 특별한 설정 없이 연동이 완료됩니다. 다만 설정을 완료했음에도 git pull 등의 작업을 수행할 때 별 다른 메시지 없이 계속 진행 중으로 뜰 때에는 ssh-add -l 명령 내장 터미널에서 실행하여 ssh-agent 서비스와의 연결 상태를 점검해볼 수 있습니다.

남정현의 블로그

DevOps related blogs

남정현

Written by

남정현

Azure와 .NET 기술을 즐겨 사용하는 개발자입니다. 한국 Azure 사용자 페이스북 그룹에서 활동합니다.

남정현의 블로그

DevOps related blogs

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade