SSH를 사용하여 Windows에 대한 원격 데스크톱 연결을 안전하게 사용
운영 환경
- Windows에 원격 연결
-
- 윈도우 11
- Windows에서 원격 연결
-
- 윈도우 10
- 오픈SSH를 클릭합니다
-
- OpenSSH_for_Windows_8.1p1, 리브레SSL 3.0.2
필수 구성 요소
- Windows에 원격 연결
-
- Windows 10 이상(Pro 또는 다른 버전 필요). 단, OpenSSH를 별도로 준비할 수 있는 경우에는 적용되지 않습니다.
- Windows Server 2019 이상. 단, OpenSSH를 별도로 준비할 수 있는 경우에는 적용되지 않습니다.
- Windows에서 원격 연결
-
- Windows(대부분의 버전 가능)
- Windows Server(대부분의 버전 가능)
처음에
클라우드 또는 VPS의 인터넷에 Windows 환경을 구축한 후 원격 데스크톱 연결을 사용하여 원격 Windows 대상을 작동하는 경우가 많습니다.
원격 데스크톱 연결에서는 통신 내용이 암호화되어 사용자 이름과 비밀번호가 유출되지 않으면 다른 사람이 무단으로 로그인하지 않습니다. 사람들이 어디서나 로그인을 시도할 것이라는 우려가 항상 있습니다.
일부 주요 클라우드에는 가상 머신과 별도의 방화벽이 있으며 연결 소스를 제한하는 기능이 있습니다. 일부 서비스에서는 이러한 기능을 사용하지 못할 수 있습니다. 특히 저예산으로 구축된 환경에서는 이러한 기능을 사용할 수 없는 경우가 많습니다.
그래서 이번에는 SSH 기능을 추가하여 연결 소스를 최대한 제한하고 싶습니다. 개인키와 공개키를 사용하기 때문에 개인키가 유출되지 않는 한 다른 환경에서 원격으로 로그인할 가능성을 최대한 최소화할 수 있습니다.
이 경우 OpenSSH 를 사용하여 SSH 환경을 구축합니다.
원격 대상 Windows 환경 구축
인터넷을 통해 원격으로 연결할 수 있는 Windows 환경을 구축합니다. 인터넷을 통해 이동하는 한 어디에서 빌드되는지는 중요하지 않지만 이 확인을 위해 Microsoft Azure에서 가상 머신으로 빌드됩니다. Azure에서 빌드하는 단계는 이 팁과 관련이 없으므로 생략하겠습니다. 이번에는 포트 22가 사용되므로 Azure를 사용하는 경우 포트 22 통신이 Azure의 가상 머신 설정을 통과하는지 확인합니다.
Azure 이외의 환경에서 빌드하는 경우 사용자 환경에 대해 Windows에 원격 데스크톱 연결을 설정할 수 있는 위치에 있는지 확인합니다.
또한 Windows 버전은 Windows 10 이상 또는 Windows Server 2019 이상을 대상으로 하므로 OpenSSH 환경을 쉽게 구축할 수 있습니다. 이전 환경에서도 구현할 수 있지만 OpenSSH를 별도로 다운로드하여 설정해야 하기 때문에 시간과 노력이 조금 더 필요합니다.
이 경우 절차는 SFTP와 동일하므로 다음 팁을 참조하십시오.
OpenSSH 설정
여기서부터는 원격 Windows 환경에서 작업합니다. 먼저 원격 데스크톱 연결을 사용하여 원격 대상에 연결합니다. 클라우드 또는 VPS에서 콘솔을 제공하는 경우 사용할 수 있습니다. 이번에는 Windows 11 환경에서 작업하기 때문에 다른 버전에서는 단계가 약간 다를 수 있습니다.
시작 메뉴를 열고 설정을 선택합니다.
앱을 선택합니다.
선택적 기능을 선택합니다.
피처 표시를 선택합니다.
목록에서 조금 아래에 "OpenSSH 서버"가 있으므로 확인하고 "다음".
Install(설치)을 클릭합니다.
설치가 완료되고 "OpenSSH 서버"가 아래 목록에 추가되면 완료됩니다.
OpenSSH에 대한 서비스 구성
시작 메뉴를 마우스 오른쪽 버튼으로 클릭하고 컴퓨터 관리를 선택합니다.
왼쪽 목록에서 서비스를 선택합니다.
중간 목록에서 "OpenSSH SSH 서버"를 찾아 마우스 오른쪽 버튼을 클릭하고 "속성"을 선택합니다.
원격으로 연결할 때 OpenSSH 서버가 실행 중이기를 원하므로 "시작 유형"을 "자동"으로 설정합니다.
현재 실행 중이 아니기 때문에 설정을 포함하여 여기에서 시작하겠습니다.
실행되면 확인 버튼을 눌러 닫습니다. 목록에서 실행 중이어야 합니다.
OpenSSH 구성
초기 상태에서는 개인 키에 의한 인증이 비활성화되어 있으므로 설정합니다. 탐색기에서 다음 폴더를 엽니다.
- C:\ProgramData\ssh (영문)
다만, 위의 폴더는 숨겨진 폴더일 수 있으니, 탐색기 옵션을 설정하여 표시해 주세요.
폴더에 라는 sshd_config
파일이 있으므로 메모장과 같은 텍스트 편집기로 엽니다.
이번에는 변경을 실시하기 때문에 변경 전에 백업으로 sshd_config_old
복사 복제하십시오.
PubkeyAuthentication yes
검색 :
비밀 키 인증 사용 여부를 설정하는 항목입니다.
기본적으로 비활성화되어 있고 라고 표시되지만 주석 처리 yes
되어 있으므로 주석 처리를 제거합니다.
변경 전
#PubkeyAuthentication yes
변경 후
PubkeyAuthentication yes
PasswordAuthentication yes
검색 :
비밀번호 인증 활성화 여부를 설정하는 항목입니다.
기본적으로 활성화되어 있으며, 개인 키 인증을 활성화하더라도 활성화 상태로 유지되면 보안 관점에서 의미가 없으므로 주석 처리를 no
제거하고 설정합니다.
변경 전
#PasswordAuthentication yes
변경 후
PasswordAuthentication no
끝 부분에 있는 다음 줄을 주석으로 처리합니다. 이는 관리자 그룹의 키 설정이며, 이 경우 사용자별 로그인을 지원하므로 사용하지 않도록 설정합니다.
변경 전
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
변경 후
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
변경 후 OpenSSH SSH Server
파일을 저장한 후 서비스를 다시 시작하여 설정을 반영합니다.
포트를 변경하려는 경우
SSH 포트를 변경하려면 다음을 변경합니다.
변경 전
#Port 22
변경 후
#Port <任意の番号>
포트 번호를 변경하면 기본 포트가 공격받지 않으므로 보안이 강화됩니다. 반면에 작업의 복잡성이 증가하므로 주의가 필요합니다.
포트 번호를 변경하는 경우 연결할 때 22 이외의 포트를 지정해야 합니다.
개인 및 공개 키 만들기
이 작업은 클라이언트 쪽 작업입니다. 그러나 어디에서 일하는지는 중요하지 않습니다. 단, 생성한 개인 키가 유출되지 않도록 주의해야 합니다.
Windows 10 이상, Windows Server 2019 이상이 있는 경우 OpenSSH 클라이언트가 기본적으로 설치되므로 명령으로 쉽게 만들 수 있습니다. 다른 환경에서는 별도의 OpenSSH 클라이언트를 설치하거나 별도의 도구를 사용해야 합니다.
다음 팁은 SFTP에 대한 것이지만 OpenSSH 클라이언트 설정에 대해서는 참조하십시오.
클라이언트 환경에서 명령 프롬프트, PowerShell, 터미널 또는 명령을 실행할 수 있는 도구를 시작합니다.
파일을 만들 것이므로 명령을 사용하여 디렉토리로 이동 cd
하십시오.
다음 명령을 실행합니다.
ssh-keygen -t rsa -f id_rsa
키에 대한 암호(비밀번호)를 설정할 수 있으므로 필요한 경우 입력해 주십시오. 암호를 설정하면 보안이 강화되지만 이후 프로세스에서 암호를 입력하는 데 드는 시간과 노력이 늘어납니다.
공개 키(id_rsa.pub)와 개인 키(id_rsa)가 생성되었습니다.
공개 키(id_rsa.pub)는 나중에 원격 대상에 배치됩니다. 개인 키는 원격 클라이언트의 어느 곳에나 위치할 수 있지만 보안 목적으로 사용되는 계정에서만 액세스할 수 있는 폴더에 있어야 합니다. 기본적으로 클라이언트 측에서 다음 폴더에 넣으면 문제 없다고 생각합니다. OpenSSH 클라이언트를 사용하는 경우 기본적으로 이 폴더로 이동합니다.
C:\Users\<ユーザー名>\.ssh
탐색기에서 위의 폴더를 만들 수 없는 경우 다음 명령어로 만들 수 있습니다.
cd C:\Users\<ユーザー名>
mkdir .ssh
공개 키 배치
이것은 원격 작업입니다.
생성된 공개 키(id_rsa.pub)를 원격 대상에 배치합니다.
이 파일을 다음 폴더로 이동합니다. <ユーザー名>
은 실제로 원격으로 연결할 때 로그인할 사용자 계정의 이름입니다.
C:\Users\<ユーザー名>\.ssh
폴더가 없어 탐색기에서 폴더를 만들 수 없는 경우 다음 명령어로 폴더를 만들 수 있습니다.
cd C:\Users\<ユーザー名>
mkdir .ssh
배포된 공개 키 파일을 authorized_keys
로 변경합니다. 그거에요.
환경에 따라 파일이 이미 authorized_keys
있을 수 있습니다. 다른 용도로 SSH 연결을 설정한 경우일 수 있습니다.
이 경우 authorized_keys
메모장 등 id_rsa.pub
으로 파일과 파일을 열고 authorized_keys의 다음 줄에 id_rsa.pub의 내용을 나열하여 파일을 등록했습니다.
authorized_keys에 여러 개의 공개 키를 등록할 수 있습니다.
SSH를 사용하여 연결
OpenSSH 명령어로 접속하는 경우
SSH로 연결하는 방법은 여러 가지가 있지만 명령 기반 연결부터 시작하겠습니다. 실제로 가장 적은 수의 단계로 연결하는 것은 명령에 의한 것입니다. 전제조건으로 OpenSSH 클라이언트가 설치되어 있어야 합니다.
선택한 명령 도구(명령 프롬프트, PowerShell, 터미널)를 시작합니다.
다음 명령을 입력합니다.
명령 형식
ssh -i <秘密鍵ファイルパス> -L <ローカルの空いているポート>:127.0.0.1:3389 <接続先のユーザーアカウント名>@<接続先サーバーIPアドレス、またはホスト名>
다음은 매개 변수에 대한 설명입니다. 환경에 따라 설정하십시오.
변수매개 변수 이름 | 설명 | |
---|---|---|
ssh | OpenSSH와 함께 SSH를 사용하기 위한 선언입니다. | |
-나는 | 개인 키 파일을 사용하기 위한 선언입니다. | |
< 개인 키 파일 경로입니다> | ● | 만든 개인 키 파일의 위치를 설명합니다. C:\Users\<ユーザー名>\.ssh 경로는 선택 사항입니다. 그렇지 않으면 절대 경로 또는 상대 경로가 필요합니다. |
-엘 | 이 선언은 원격 대상에 연결할 때 로컬 및 원격으로 사용할 포트를 지정합니다. | |
지역 자유 항구<> | ● | 원격 데스크톱 연결은 일반적으로 포트 3389를 사용하지만 모든 포트를 사용하여 연결할 수 있습니다. 무료라면 어떤 번호인지는 중요하지 않습니다. |
127.0.0.1 | 원격 대상이 연결된 위치를 인식하는 호스트 IP 주소입니다. 기본적으로 127.0.0.1은 괜찮습니다. | |
3389 | 원격 대상에서 사용할 포트 번호입니다. 원격 대상은 일반적으로 원격 데스크톱 연결로 포트 3389로 연결되므로 그대로 둘 수 있습니다. | |
연결할 사용자 계정의 이름을 <> | ● | 원격 대상에서 연결할 계정을 지정합니다. |
연결할 서버의 IP 주소 또는 호스트 이름을 <> | ● | 원격 대상 서버를 지정합니다. |
예제 입력
ssh -i id_rsa -L 13389:127.0.0.1:3389 TestUser@52.140.221.194
처음에는 키를 입력하라는 메시지가 표시되므로 yes
입력하고 Enter 키를 누릅니다.
개인 키에 대한 암호 세트가 있는 경우 해당 암호를 입력해야 합니다.
다음은 연결된 상태입니다. 클라이언트가 아닌 서버 측의 사용자가 표시되는 것을 볼 수 있습니다. 이 창이 표시되는 동안에는 연결된 것이므로 닫지 마십시오. 닫으면 연결이 끊어집니다.
PuTTY로 연결하는 경우
여기서는 PuTTY라는 도구를 사용하여 SSH에 연결을 시도합니다.
개인 키 변환
먼저 PuTTY를 사용하는 경우 개인 키를 변환해야 합니다. 첨부 된 도구에 "puttygen .exe"가 있다고 생각하기 때문에 시작하십시오.
메뉴에서 '전환 - > 키 가져오기'를 선택합니다.
만든 개인 키(이 경우 "id_rsa")를 선택합니다.
암호를 설정한 경우 암호를 입력합니다.
메뉴에서 "파일 - > 개인 키 저장"을 선택합니다.
「. .ppk" 파일.
생성되면 완료됩니다.
PuTTY 구성
putty.exe 시작
연결하려는 환경의 IP 주소를 입력합니다. 도메인이 있는 경우 도메인 이름으로 연결할 수 있습니다.
왼쪽 메뉴에서 연결 - > 데이터를 선택합니다. Auto-login username(자동 로그인 사용자 이름) 필드에 연결하려는 환경의 계정 이름을 입력합니다.
왼쪽 메뉴에서 연결 -> SSH -> 터널을 선택합니다. 아래 입력 필드에 각각을 입력하고 "추가" 버튼을 클릭합니다.
매개 변수 이름 값 | 설명 | |
---|---|---|
원본 포트 | 13389 | 모든 무료 포트가 가능합니다. 나중에 사용하겠습니다. |
목적지 | 127.0.0.1:3389 |
추가하면 다음과 같이 표시됩니다.
그런 다음 왼쪽 메뉴에서 "Connection -> SSH -> Auth -> Cledentioals"를 선택하고 "인증용 개인 키 파일" 찾아보기 버튼을 클릭합니다.
저장한 개인 키를 선택합니다.
왼쪽 메뉴에서 "Session(세션)"을 선택하고 Save Sessions(세션 저장)에 원하는 이름을 입력한 다음 Save(저장) 버튼을 클릭합니다. 다음 번부터는 이 설정을 로드하면 OK입니다.
저장을 확인한 후 "열기" 버튼을 클릭합니다.
처음 연결할 때 다음 화면이 표시됩니다. 수락 버튼을 클릭합니다.
명령 프롬프트처럼 보이는 화면이 표시됩니다. 개인 키에 대한 암호가 있는 경우 해당 암호를 입력합니다.
표시 내용이 아래와 같이 변경되면 연결됩니다. 클라이언트가 아닌 서버 측의 사용자가 표시되는 것을 볼 수 있습니다. 이 창이 표시되는 동안에는 연결된 것이므로 닫지 마십시오. 닫으면 연결이 끊어집니다.
SSH를 사용하여 원격 데스크톱 연결 만들기
이제 SSH로 연결된 상태에서 원격 데스크톱 연결을 만들어 보겠습니다.
연결할 때 컴퓨터 부분은 실제 원격 주소가 아니라 "localhost:< > SSH 연결에 지정된 포트 이름"입니다. 예제에서는 13389가 지정되었으므로 여기서는 "localhost:13389"에 연결합니다.
인증 화면이 표시되면 연결이 완료된 것으로 판단할 수 있습니다. 연결할 사용자 이름과 비밀번호를 입력합니다.
이렇게 연결할 수 있다면 성공한 것입니다.
방화벽 설정에서 일반 원격 데스크톱 연결 비활성화
이전 항목의 경우 이제 SSH를 사용하여 원격 데스크톱에 연결할 수 있습니다. 그러나 이 상태에서는 "SSH에 의한 원격 데스크톱 연결"이 "일반 원격 데스크톱 연결"에만 추가되었습니다. 보안 측면에서는 아무것도 추가하지 않습니다. 따라서 다음으로 할 일은 "정상적인 원격 데스크톱 연결"을 방지하는 것입니다.
이 설정을 하면 "SSH에 의한 원격 데스크톱 연결" 이외는 접속할 수 없기 때문에, 설정을 엉망으로 하면 원격으로 접속할 수 있는 수단이 없을지도 모릅니다. 따라서 "SSH에 의한 원격 데스크톱 연결"이 가능한지 사전에 확인하고, 연결하려는 클라이언트가 없어져도 다른 방법으로 원격 환경을 조작할 수 있도록 합시다.
여기에서 "SSH를 통한 원격 데스크톱 연결"에서 방화벽 설정을 구성합니다. "일반 원격 데스크톱 연결"로 작업을 수행하면 방화벽을 설정하는 순간 연결이 끊어지기 때문입니다.
고급 보안 기능이 있는 Windows Defender 방화벽을 봅니다. Windows 버전에 따라 표시 위치가 다르기 때문에 해당 버전에 맞게 표시하십시오.
왼쪽 메뉴에서 인바운드 규칙을 선택합니다.
중간 목록에서 "원격 데스크톱 - 사용자 모드(TCP 입력)"를 찾아 해당 속성을 엽니다.
범위 탭을 선택하고 로컬 IP 주소를 다음 IP 주소로 변경한 다음 추가 단추를 클릭합니다.
127.0.0.1을 입력하고 확인 버튼을 클릭합니다. 이렇게 하면 127.0.0.1 이외의 위치에서 원격 데스크톱 연결이 방지됩니다. 127.0.0.1은 컴퓨터를 가리키는 IP 주소입니다. 잘못된 값을 입력하면 어디서든 연결할 수 없는 경우가 있으니 주의하세요.
확인 버튼을 클릭하여 확인합니다.
우선 이것만으로도 대책이지만, "원격 데스크톱 사용자 모드 (UDP 수신)"도 설정해 봅시다.
SSH 이외의 다른 항목을 사용하여 원격으로 연결할 수 없는지 확인합니다.
이제 SSH를 사용하지 않는 다른 PC에서 원격 데스크톱 연결을 시도합니다.
연결할 수 있으면 인증 화면이 표시됩니다. 아래와 같이 연결이 되지 않는 것을 확인할 수 있으면 OK입니다.
요약
최신 Windows를 사용하면 이제 SSH 서버를 쉽게 도입할 수 있습니다. 이제 설정을 추가하여 원격 데스크톱 연결의 보안을 쉽게 강화할 수 있습니다. 그러나 Windows 자체의 보안 조치에 대해서만 책임을지기 때문에 더 안전하게 만들고 싶다면 Windows에 연결하기 전에 별도의 SSH 서버나 방화벽을 설정하는 것이 바람직하다고 생각합니다.
또, SSH를 이용하고 보안을 꼼꼼하게 설정할 수 있습니다만, 너무 딱딱한 경우는, 동작상의 오차로 아무도 접속할 수 없습니다. 그렇게 끝나지 않도록 주의하십시오.