때는 바야흐로 5월의 어느날...
점심을 먹고나니 졸려서 바람을 쐬러 나가는데, 회사 친한 동생을 마주쳐서 같이 나오게 되었다.
그때 같이 나오질 말았어야 했는데...
같이 나오면서 동생이 여자친구가 생겼다고 자랑질을 하면서 염장을 지르는게 아닌가...젠장...
그렇게 염장질을 당하고 들어 와서 Jenkins에 신규 사이트 프로젝트 셋팅을 하는데 SSH연결이 되질 않는다...(죽을 맛이었다ㅡㅡ;)
그 동생이 미웠다...아니...염장질을 당한게 짜증이 나기 시작 하면서 연결이 되지 않는 Publish Over SSH 플러그인이 미웠다...
무튼...하~
그래도 해결하고 한번 써본다...이 세상 솔로부대원들이 염장질을 당하지 않고, 또한 같은 오류로 고생하고 있을 분들의 삽질에 두어삽 이라도 줄어들었음 하는 마음에...
Jenkins는 windows 서버2012에 설치 되어 있고, 연결 하려고 하는 서버는 windows 서버 2022에 OpenSSH를 설치 했다.
OpenSSH는 https://github.com/PowerShell/Win32-OpenSSH 여기서 64비트용 zip 파일을 받아서 설치 했고,
비밀번호 없이 연결위해 ssh-keygen으로 생성한 인증서를 적용해 줬다.
1. 연결확인
우선 연결 하려고 하는 서버(windows 2022)에 OpenSSH를 설치 하고, 방화벽을 오픈후, Jenkins가 설치 되어 있는 서버(windows 2012)에 cmd를 열어서 ssh 명령어로 연결이 되는지 확인을 해봤더니 정상적으로 연결이 되는걸 확인 했다.
2. Jenkins 설정.
Jenkins Publish Over SSH 플러그인에 SSH Server 설정을 완료후 Test Configuration를 클릭 했더니
"jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to connect SFTP channel. Message [java.io.IOException: inputstream is closed]]" 이 에러가 발생을 했다.
3. 해결
다양한 시도를 해봤던거 같다. Stack Overflow를 검색을 해봐도 Publish Over SSH 플러그인에서 나오는 동일한 오류는 보이지 않았다. java로 만든 코드에서 오류는 보였지만 그다지 도움이 되지는 않았다. 인증 방법도 rsa에서 ecdsa로 변경을 해보고, 인증서를 사용하지 않고 그냥 비밀번호를 통한 연결을 해봐도 오류는 똑 같았다...OpenSSH 설정을 다시 해보기도 하고 해볼수 있는건 다 해본거 같았다...그러다 우연히 리눅스에서 OpenSSH를 설정한 블로그 글을 봤는데, SSH 설정 파일인 sshd_config 파일에 sftp_server 실행 파일의 위치를 지정해 주는걸 보게 되서 혹시나 해서
-Before
Subsystem sftp sftp-server.exe
-After
Subsystem sftp C:\Program Files\OpenSSH-Win64\sftp-server.exe
위 처럼 sftp-server.exe 파일의 전체 경로를 지정을 해주고 했더니...짜잔~ 염장질을 당한 아픔이 치료되었습니다...ㅠㅠ
그리고 OpenSSH 구버전의 경우 "Subsystem sftp sftp-server.exe" 이 설정 내용이 없을수도 있습니다.
저도 이번에 OpenSSH 신버전을 다운받아 설정하려고 보니 첨보는 설정 항목 이었습니다.
"Subsystem sftp sftp-server.exe" 이 설정이 없는 OpenSSH 구버전에서 저와 같은 오류가 난다면,
"Subsystem sftp C:\Program Files\OpenSSH-Win64\sftp-server.exe" 이 설정을 추가후 한번 시도 해보는것도 방법이지 않을까 합니다.