아~ 윈도우 진짜...ㅡㅡ;;;
윈도우는 SSH를 공식으로 지원하지 않는다...
아놔~ #@$%#$^$%^$#@%@#$%(대충 심한말...ㅡㅡ;;)
일단 알아둘 내용 먼저 적자면...
SSH설치 하려고 찾아 봤더니 windows2019까지도 SSH를 지원 하지 않는거 같았보였지만, windows10에서는 지원을 하는걸 보니,
차기 버전에서는 윈도우 server에서도 ssh를 지원을 하지 않을까 하는 생각이 든다.
우선 Windows에 SSH서버를 설치 하는 방법은 FreeSSH 설치 파일로된 것을 받아서 설치 하는 방법과, OpenSSH zip파일을 받아서
설치 하는 방법 크게 대표적인 두가지 방법이 있어 보였지만, 인스톨러로 설치하는걸 별로 선호하지 않아서
그냥 OpenSSH zip을 다운받아 설치를 진행 했지만, FreeSSH로 안하게 된 결정적 이유는 버그가 있다고 해서 안하게 됬다.
근데 OpenSSH로 설치 하게 되면 한가지 문제가 있다. 포트변경을 못한다. 잼있는건 OpenSSH를 설치 하게 되면 서비스로 설치가 되는데,
서비스를 시작하면 22번 포트가 방화벽에서 그냥 open이 되는거 같아 보였다. 좀 어이가 없기는 했는데...
이건 좀더 테스트를 해봐야 하는 내용이다.
설치 하는 방법이야 구글에게 물어 보면 많이 알려주니까 넘어 가고, 격었던 문제와 해결한 방법을 남겨본다...
이번에 Jenkins를 구축 하면서 배포 자동화를 하기 위해 고객사 서버에 SSH 서버를 설치 하고 public key를 통해서 Jenkins에서는 id/pw를 입력하지 않아도 ssh로 로그인이 되게 하는게 목적이었다.
첫번째 난관
jenkins 서버에서 콘솔을 통해서 ssh 서버에 로그인을 하면 아무리 해도 id랑 pw 없이 로그인이 되질 않았다.
그래서 이 문제 가지고 월요일부터 삽질 하고 있었는데, 해외 사이트에서 윈도우 빌드 넘버 1709? 인가 부터는 sshd_config 설정 파일에
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys 이부분을 주석으로 막아야 된다고 나와 있는 글이 있어서 1600 번대 빌드 번호 였기에 무시 하고 있다 오늘 도저히 해결이 안되서 혹시나 하는 마음에 저 부분을 주석을 막았더니 떡~!!!! 하고 됬다...ㅡㅡ;;;
두번재 난관...
첫번째 난관을 지나 기뿐 마음으로 Jenkins에서 빌드 설정을 하는데, 첫번째 난관에서 id/pw없이 콘솔로 연결이 됬는데...
막상 Jenkins에서는 연결이 되질 않았다...
Test Connection 버튼이 있는데 버튼만 누르면
"Failed to connect or change directory
jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key. Message [invalid privatekey: [B@d8d395a]"
자꾸 이런 에러가 났다...
왜!!! 콘솔에서는 연결 잘~ 되는데...도데체 뭐가 문제란 말인가... 오~ 주여~~ ㅠㅠ
난관에 봉착을 했으니...또 찾아야지~ 구글링을 또 했다...
한 Jenkins 이슈 쓰레드에 나랑 같은 이슈로 골머리 썩고 있는 사람들이 쓴글이 보였고, 그 맨 마지막에 해결책이 있었다.
private / public key 생성을 예전 버전(?)의 포맷으로 하라는 글이 보여서.
지금까지는 키 생성을
ssh-keygen -t rsa
이렇게만 했는데 이걸
ssh-keygen -t rsa -b 4096 -m PEM
이렇게 해서 다시 생성을 하니까 진짜 거짓말 처럼 Jenkins에서 연결이 됬다....
전에 파일과 새로 생성한 파일을 비교해보니 Header 부분이 좀 다르긴 했는데 이 차이로 private key를 인식하지 못한건 좀...그런거 같다..
그리고 이문제는 윈도우에서 OpenSSH zip 파일안에 있는 ssh-keygen을 사용해서 private/public 키를 생성했을때 발생되는 문제 인거 같고,
리눅스에서 생성한 private/public 키는 문제 없이 순탄 하게 잘 진행 됬었다...리눅스 만쉐~~~
2024.07.02 추가
몇년간 Jenkins운영을 하면서 발생했던 이슈를 하나 추가 하고자 한다.
그전에 Windows Server 2019 기준으로 OpenSSH Server를 선택적 기능관리 화면에서 설치 할수 있게 되었다.
한땀 한땀 수동으로 설치를 하는거나 선택적 기능관리 화면에서 설치 하는거나 기능적으로는 별차이가 없었지만,
한가지 차이가 있는게, 선택적 기능관리 화면에서 설치 하게 되면 방화벽 정책이 같이 추가가 되는데, 22번 포트를 변경이 안된다. 그래서 만약에 포트 변경을 하고 싶으면 sshd_config 파일에서 포트를 변경하고, 자동으로 추가된 정책을 사용안함으로 변경후 sshd_config 파일에서 변경한 포트 정책을 추가해 줘야 된다. 뭐 이게 차이라면 차이일수 있을거 같다.
본론으로 들어가면, 이 이슈는 Linux에는 해당 하지 않는다. windows server에만 해당된다.
OpenSSH를 수동으로 설치 하게 되면 sshd_config 파일에 거의 마지막 쯔음에 Subsystem sftp sftp-server.exe 이 설정이 주석으로 막혀 있다. 이 주석을 풀어줘야 Jenkins에서 Publish Over SSH 플러그인 사용시 배포 파일 전송이 가능하다.
끝~!