[Windows] OpenSSH 서버 실행하고 SSH로 접속하는 방법

Linux 서버는 원격에서 OpenSSH 프로토콜로 접속해서 커맨드라인으로 사용하는 게 일반적입니다. Windows 는 주로 데스크탑으로 사용하지만, OpenSSH 서버를 실행해서 원격에서 커맨드라인으로 접속할 수 있습니다. 윈도에서 명령 프롬프트를 주로 사용할 때는 커맨드라인에서 할 수 있는 일이 매우 제한적이었습니다만, 현재는 PowerShell은 물론 WSL도 사용할 수 있기 때문에 활용 범위가 넓어졌습니다.

이 글에서는 Windows 10/11(공통)을 기준으로 OpenSSH 서버를 활성화하는 방법에 대해서 알아봅니다. 또한 SSH 비밀키로 로그인할 수 있도록 설정하는 방법과 기본 셸을 변경하는 방법도 소개합니다.

Windows에서 OpenSSH 서버 활성화하는 방법

Windows에서 OpenSSH 서버를 활성화하려면 다음 명령어를 실행해야합니다. 관리자 모드로 PowerShell을 실행하거나 Windows Terminal에서 PowerShell 탭을 열어 다음 명령어를 실행합니다.

$ Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Add-WindowsCapability 명령어를 실행중인 화면

몇 분 정도 시간이 걸립니다. OpenSSH 기능을 활성화하는 것은 이 명령어 하나면 됩니다.

Path          :
Online        : True
RestartNeeded : False

명령어가 완료되면 위와 같이 출력됩니다. 하지만 아직 할 일이 몇가지 더 남아있습니다. 이제 다음 명령어로 sshd 서비스를 실행해줍니다.

$ Start-Service sshd

부팅 시점에 자동으로 서비스를 실행하고자 한다면 Set-Service로 sshd를 등록해줍니다.

$ Set-Service -Name sshd -StartupType 'Automatic'

OpenSSH 접속을 위한 방화벽 설정

다음으로 방화벽 설정을 확인해봅니다. 이 정책은 Windows 머신 자체에서 TCP 22번 포트(SSH 기본 포트)로 외부 접속을 허용하는 규칙을 담고 있습니다.

$ Get-NetFirewallRule -Name OpenSSH-Server-In-TCP
Name                  : OpenSSH-Server-In-TCP
DisplayName           : OpenSSH SSH Server (sshd)
Description           : Inbound rule for OpenSSH SSH Server (sshd)
DisplayGroup          : OpenSSH Server
Group                 : OpenSSH Server
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : 저장소에서 규칙을 구문 분석했습니다. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

Enabled 속성이 ture이면 정상입니다. OpenSSH-Server-In-TCP 이름으로 검색이 되지 않는다면 *ssh*로 변경해서 실행해봅니다. 만약 위와 같은 결과가 나오지 않는다면 New-NetFirewallRule 명령어로 직접 방화벽 규칙을 생성할 수 있습니다.

$ New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH-Server-In-TCP' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

localhost로 OpenSSH 서버 접속 테스트

OpenSSH 서버가 정상 동작하고 있는지 간단히 확인해보도록 하겠습니다. 앞서 OpenSSH를 설치한 같은 컴퓨터에서, PowerShell로 이어서 진행합니다. 먼저 ssh 클라이언트가 있는지 확인해봅니다.

$ ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] ...

ssh를 인자 없이 실행했을 때 usage가 나오면 SSH 클라이언트를 사용할 수 있습니다. 명령어가 없다고 실패하는 경우 다음 명령어를 입력해서 SSH Client도 활성화해줍니다.

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

활성화 후에 다시 ssh 명령어가 있는지 확인해봅니다.

다음으로 현재 사용자를 확인하기 위해 whoami를 실행합니다. 여기서 \ 문자 뒤의 이름이 SSH 접속에 사용되는 사용자 이름입니다.

$ whoami
desktop-dk189n6\lainy

이 예제에서 SSH 접속에 사용하는 사용자 이름은 lainy가 됩니다.

다음 명령어로 현재 서버의 SSH에 접속해보겠습니다. 그 전에 SSH로 접속이 잘 되었는지 확인하기 위해 dir env:*ssh* 이 명령어를 로컬에서 실행해봅니다.

$ dir env:*ssh*

아무것도 뜨지 않으면 정상입니다.

SSH로 다른 서버에 접속할 때는 다음과 같이 ssh 명령어를 사용합니다.

$ ssh [USERNAME]@[HOST] [COMMAND]

[USERNAME]는 앞서 확인한 현재 시스템의 사용자로 치환합니다. [HOST]는 현재 시스템에 접속하려고 하므로 localhost로 치환합니다. localhost는 네트워크에서 현재 컴퓨터를 의미하는 특별한 단어입니다. 원격에서 실행할 명령어를 [COMMAND]를 지정할 수 있습니다만, 생략하면 SSH 서버에 셋업된 셸이 실행됩니다. 여기서는 dir env:*ssh*를 실행하겠습니다.

그럼 실제로 ssh를 실행해보겠습니다.

$ ssh lainy@localhost dir env:*ssh*
lainy@localhost 's password:

패스워드를 물어봅니다. 이 때 패스워드는 현재 로그인한 계정의 패스워드입니다. Microsoft 계정과 연동되어있다면, 해당 계정의 패스워드를 입력해줍니다.

$ ssh lainy@localhost  dir env:*ssh*
lainy@localhost's password:
Name                           Value
----                           -----
SSH_CONNECTION                 ::1 52088 ::1 22
SSH_CLIENT                     ::1 52088 22

로컬에서 그냥 실행했을 때는 아무것도 나오지 않았는데, SSH로 연결돼있는 상태에서는 SSH_CONNECTION과 SSH_CLIENT 정보가 출력되는 것을 확인할 수 있습니다. 이걸로 현재 컴퓨터에서 SSH 서버가 잘 활성화되어있는 것을 확인할수 있습니다.

윈도우 컴퓨터에 접속하기 위한 IP 확인하는 방법

로컬 네트워크에서 SSH 서버에 접속하고자 하는 경우, 네트워크 장비나 SSH 서버가 설치된 컴퓨터에서 ipconfig로 IP를 확인해볼 수 있습니다.

보통 여러가지가 출력되기 때문에 상황에 따라 확인이 필요합니다만 ‘이더넷 어댑터 Ethernet’ 항목을 확인해봅니다. 여기서 192.168로 시작하는 IPv4 주소를 기록해둡니다. (일반적으로 홈 네트워크에서는 192.168로 시작하는 주소를 사용하지만, 환경마다 다르기 필요하다면 공유기 설정이나 네트워크 관리자의 확인이 필요합니다.)

$ ipconfig
...
이더넷 어댑터 Ethernet:

   연결별 DNS 접미사. . . . : localdomain
   IPv4 주소 . . . . . . . . . : 192.168.1.48
   서브넷 마스크 . . . . . . . : 255.255.255.0
   기본 게이트웨이 . . . . . . : 192.168.1.1
...

로컬 네트워크 상의 다른 컴퓨터에서 해당 IP 주소로 SSH 접속을 해봅니다.

$ ssh [email protected] dir env:*ssh*
lainy@localhost's password:
Name                           Value
----                           -----
SSH_CONNECTION                 192.x.x.x 53154 192.x.x.x 22
SSH_CLIENT                     192.x.x.x 53154 22

위와 같이 출력되면 접속에 성공한 것입니다. 접속이 안 될 경우 방화벽이나 네트워크 설정 등 다양한 원인이 있을 수 있습니다. 네트워크 장비 쪽에서 OpenSSH 서버와 클라이언트 서버가 정상 연결되어있는지, 방화벽은 적절하게 열려있는지 등 확인이 필요합니다.

(네트워크 이슈를 다루는 것은 이 글의 범위를 넘어서는 주제라서 적절한 키워드로 검색해보는 것을 추천드립니다. 기회가 된다면 다른 글에서 네트워크 트러블 슈팅 방법에 대해서 소개해보겠습니다.)

또한 여기서는 홈 네트워크에서 접속을 하는 경우를 가정했습니다만, 홈 네트워크 바깥의 인터넷 망에서 윈도우 OpenSSH 서버에 접속하고 싶다면 추가 설정이 필요합니다. 홈 네트워크 상에 VPN 서버를 구축하거나, 네트워크 장비의 포트 포워딩 기능을 윈도우 서버의 OpenSSH 포트를 외부망(인터넷)에 노출시켜야합니다. 이는 보안적으로 매우 위험하며 정확히 어떤 잠재적 위험이 있는지 이해하지 못 한다면 설정하지 않는 것을 권장합니다.

이 게시글이 문제가 될 시, 삭제하겠습니다 
출처 : https://www.lainyzine.com/ko/article/how-to-run-openssh-server-and-connect-with-ssh-on-windows-10/

댓글 없음:

Powered by Blogger.