IT Info

Windows 10 OpenSSH를 사용한 SFTP 서버 설정 방법

Jan92 2023. 2. 10. 23:03

OpenSSH를 사용하여 Windows 10에서 SFTP 서버를 설정하는 방법

 

해당 포스팅은 윈도우10 운영체제에서 자체 기능인 OpenSSH를 사용하여 sftp server를 실행하고 접속하는 방법에 대해서 정리한 내용입니다.

최초 password를 통한 sftp 접속에서부터 공개키 인증을 사용한 접속 방법까지 살펴볼 예정이며, 실제 서버와 클라이언트로 나뉘는 부분을 예시에서는 하나의 계정을 통해 처리하였기 때문에 이 부분을 주의해서 따라와 주시면 좋을 것 같습니다.

 

 


1. OpenSSH 설치

윈도우 -> 설정 -> 앱

먼저 sftp 서버를 작동시키기 위해서 sftp server가 될 곳에서 OpenSS 서버를 설치해야 하는데요.

'윈도우 -> 설정 -> 앱'으로 이동합니다.

 

 

앱 및 기능 -> 선택적 기능

'앱 및 기능 -> 선택적 기능'으로 이동합니다.

 

 

OpenSSH 서버, OpenSSH 클라이언트 설치

선택적 기능 추가 부분에서 'OpenSSH 서버', 'OpenSSH 클라이언트' 두 가지 기능을 추가합니다.

 

***

주의해야 할 점은 포스팅 맨 처음에 말씀드렸던 것처럼 해당 포스팅에서는 서버와 클라이언트를 하나의 계정에서 다 적용해 볼 것이기 때문에 두 가지 기능을 모두 설치하는 것입니다.

따라서 실제로는 서버의 역할을 하는 곳에서는 'OpenSSH 서버' 기능의 설치가 필요하고, 클라이언트의 역할을 하는 곳에서는 'OpenSSH 클라이언트' 기능의 설치가 필요합니다.

 

 


 2. OpenSSH 서비스 실행 및 접속

윈도우 -> 서비스

sftp 서버가 될 곳에서 OpenSSH 서버 기능에 대한 설치가 끝났다면 '윈도우 -> 서비스'로 이동하여 'OpenSSH SSH Server'를 찾아 해당 서비스를 시작해 주면 됩니다.

 

 

PowerShell sftp 접속 테스트

다음은 클라이언트에서 sftp 서버에 접속하는 부분입니다.

 

sftp jian@localhost
//sftp [username]@[servername]

위 명령어를 통해 sftp 서버에 접속할 수 있으며, 해당 계정에 대한 password를 입력해야 하는데요.

password가 일치하는 경우 Connected to localhost.라는 서버에 접속되었다는 메시지가 나오며 sftp 서버에 연결됩니다.

 

//클라이언트에서 서버로 파일 전송
put c:\users\jian\desktop\test.txt

//서버에서 클라이언트로 파일 다운로드
get test.txt c:\users\jian\desktop\download\getTest.txt

sftp 서버에 파일을 업로드하는 명령어는 put, 다운로드하는 명령어는 get으로 사용할 수 있는데요.

put의 경우 클라이언트에서 업로드할 파일의 전체 경로 및 파일 이름을 입력하면 되고, get의 경우 서버에 있는 test.txt라는 파일을 이후 경로에 설정한 이름으로 다운로드하게 됩니다.

 

***

 여기까지가 암호 인증 방식을 통한 sftp 서버 설정인데요. 만약 외부 ip에서 sftp 서버에 접근을 허가하기 위해서는 'Windows Defender 방화벽'에서 22번 포트를 허용해 주는 추가 작업이 필요합니다.

(설명이 부족한 부분에 대해서는 포스팅 맨 하단에 참고 자료가 있으니 함께 보셔도 좋을 것 같습니다.)

 

 


3. sftp 공개 키 인증 방식 적용

공개키 생성

공개 키 인증 방식을 적용하기 위해서는 먼저 개인 키 및 공개 키를 생성해야 합니다.

키 생성은 클라이언트 측에서 이뤄지며, 생성된 키들 중 공개 키는 서버에 등록되어 인증에 사용되고, 개인 키는 클라이언트 측에서 접속할 때 사용되게 됩니다.

 

ssh-keygen -t rsa -f id_rsa

키 생성은 다음 명령어를 통해 이뤄지며, 키가 생성될 때 키에 대한 비밀번호도 설정할 수 있습니다.

정상적으로 키가 생성되었다면 이미지와 같이 개인 키 'id_rsa'와 공개 키 'id_rsa.pub'가 생성된 것을 확인할 수 있습니다.

 

 


4. 서버 공개 키 배치

sftp 서버에 공개 키 배치

이어서 클라이언트에서 생성된 공개 키 'id_rsa.pub'를 서버에 배치하는 작업입니다.

해당 파일을 배치하는 위치는 C:\Users\<username>\.ssh 디렉터리에 배치해야 하며, 이때 파일 이름은 'id_rsa.pub'에서 'authorized_keys'로 변경해야 합니다.

 

***

주의할 점은 해당 파일에 대한 액세스 권한인데요. '관리자' 또는 'sftp 사용자' 계정만 다음 파일에 액세스 할 수 있어야 하며, 그 외 다른 사용자가 액세스 할 수 있는 경우에는 'Too many authentication failures' 메시지가 출력되며 연결에 실패하게 됩니다.

 

 


5. 서버 공개 키 인증 사용 설정

ProgramData -> ssh

sftp 서버에 공개 키를 정상적으로 배치했다면 이어서 공개 키 사용에 대한 설정을 변경해주어야 하는데요.

서버 측에서 C:\ProgramData\ssh 경로로 들어가게 되면 'sshd_config'라는 ssh 설정 파일을 볼 수 있습니다.

(ProgramData 디렉터리는 숨김으로 되어 있기 때문에 숨김 폴더 보기를 통해 접근할 수 있습니다.)

 

이제 설정 파일의 내용을 변경해야 하는데요. 혹시 모를 문제를 대비하여 해당 파일을 하나 복사하여 'sshd_config_default'라는 백업 파일을 만들어 둔 후 'sshd_config' 파일을 수정합니다.

(해당 파일 수정에는 관리자 권한이 필요합니다.)

 

 

sshd_config

기본적인 공개 키 인증 방식 ssh 접속을 위해 해당 파일에서 변경되어야 할 부분은 3곳인데요.

이후 구체적인 sftp 설정을 변경할 때도 해당 파일의 옵션을 통해 설정이 가능합니다.

 

#PubkeyAuthentication yes

첫 번째 변경해주어야 하는 부분은 공개 키 인증 사용 부분입니다.

해당 부분이 주석처리가 되어 있기 때문에 공개 키 인증이 사용되지 않고 있는 것으로 아래와 같이 주석을 처리하고 옵션의 값을 'yes'로 설정합니다.

PubkeyAuthentication yes

 

#PasswordAuthentication yes

두 번째 변경해주어야 하는 부분은 암호 인증 사용 부분입니다.

해당 부분 역시 아래와 같이 주석 처리를 해제하고 옵션 값을 'no'로 설정하게 되면 암호 인증이 적용되지 않습니다.

PasswordAuthentication no

 

Match Group administrators
		AuthorizedKeysFile __PROGRAMDATA__\ssh\administrators_authorized_keys

마지막으로 변경해주어야 하는 부분은 sshd_config 파일 맨 아래에 다음 부분입니다. 해당 부분은 아래와 같이 주석처리 해주면 됩니다.

#Match Group administrators
#		AuthorizedKeysFile __PROGRAMDATA__\ssh\administrators_authorized_keys

 

여기까지 서버 단에서 'sshd_config' 파일의 수정이 끝났다면 변경사항을 적용하기 위해 '윈도우 -> 서비스'에서 'OpenSSH SSH Server'를 중지하고 다시 실행해 주시면 sftp 서버 측에서의 설정은 끝입니다.

 

 


6. 클라이언트 공개 키 인증 접속

id_rsa

다음으로 클라이언트에서 개인 키 'id_rsa'를 통한 sftp 서버 접속입니다.

개인 키 역시 C:\Users\<username>\.ssh 디렉터리에 배치해야 하며, 해당 디렉터리에 대한 액세스 권한은 '관리자' 및 'sftp 클라이언트' 계정만 가능해야 합니다.

 

***

해당 폴더에 서버 측에 배치한 공개 키인 'authorized_keys' 파일이 있는 이유는 현재 예시에서 서버와 클라이언트를 모두 한 계정으로 사용하고 있기 때문입니다. 실제로 클라이언트 측에서는 sftp 접속에 개인 키 'id_rsa'만 필요로 합니다.

 

 

sftp ssh 접속

sftp -i id_rsa jian@localhost
//sftp -i id_rsa [username]@[servername]

위 명령어를 통해 최종적으로 공개 키 인증 방식을 통해 sftp에 접근되는 것을 확인할 수 있습니다.

 

 

 

< 참고 자료 >

https://sorceryforce.net/ko/tips/sftp-setup-open-ssh-password