2023. 2. 9. 13:15ㆍJenkins
이번 포스팅에선 Jenkins와 Github간 SSH 연동 방법에 대해서 다뤄 보겠다.
SSH란?
Secure SHell은 네트워크 상의 원격 컴퓨터에 접속하여 명령을 실행할 수 있도록 해주는 프로토콜이다.
기존에는 Telnet 방식을 사용했는데 암호화를 제공하지 않기 때문에 보안상 취약하다는 단점을 보완한 방법이 SSH이다.
암호화 방식에는 대칭키 방식과 비대칭키 방식 두가지를 사용한다.
비대칭키 방식은 클라이언트와 서버간 인증시 사용한다.
대칭키 방식은 클라이언트와 서버간 데이터를 주고받을 때 사용한다.
비대칭키 방식
비대칭 키 방식은 두 호스트 간에 공개키와 개인키 쌍으로 인증하는 방식이다.
공개키는 .pub, 개인키는 .pem의 형식을 띈다.
공개키는 유출되어도 크게 문제가 되지 않는 키이며 공개키로 암호화된 데이터는 개인키로만 복호화할 수 있다.
개인키는 발행한 쪽만 알고 있는 키이며 개인키로 암호화한 데이터는 공개키로만 복호화할 수 있다.
사용자 인증 Flow
3 way handshaking 과정으로 사용자를 인증한다.
- 클라이언트(Jenkins)가 공개키와 개인키 발행후 공개키를 서버에 전달
- 공개키를 서버에 파일로 저장
- 서버는 난수의 해시값을 생성
- 공개키로 암호화한다.
- 클라이언트에게 다시 전달한다.
- 클라이언트는 해당 데이터를 개인키로 복호화한다.
- 복호화한 값을 서버로 보낸다.
- 서버는 처음 값과 응답받은 값을 비교하여 두 같이 같다면 두 호스트간의 인증이 완료된다.
서버 인증 Flow
위 과정에서 클라이언트와 서버 역할만 바꾸면 된다.
대칭키 방식
대칭키 방식은 두 호스트 간에 정보를 주고받을 때 사용한다.
대칭키 방식은 비대칭키 방식과 다르게 한 개의 키만 사용한다.
대칭키로 암호화된 데이터는 대칭키로만 복호화할 수 있다.
두 호스트간 데이터 전송 Flow
- 클라이언트 인증과 서버 인증이 끝나면 내부적으로 대칭키(세션키)를 생성하여 주고 받게 된다.
- 데이터를 대칭키로 암호화하여 상대측에 전송한다.
- 데이터를 수신한 측은 데이터를 대칭키로 복호화한다.
- 데이터 송신이 끝나면 대칭키를 폐기하고 다시 접속시마다 새로운 대칭키를 생성한다.
공개키/개인키 생성
실행중인 젠킨스 사용자를 확인한다.
ps aux | grep jenkins
현재 사용자를 jenkins로 변경하고 shell command 실행 권한을 준다.
sudo -u jenkins /bin/bash
.ssh 디렉토리를 생성한다.
mkdir /var/lib/jenkins/.ssh
cd /var/lib/jenkins/.ssh
ssh 키를 생성한다.
아래의 명령어를 실행하면 공개키와 비밀키를 생성한다.
ssh-keygen
은 Linux SSH 패키지에 포함되어 있는 프로그램이다.
-t
: key 암호화 알고리즘 타입
-f
: key file의 filename
명령을 실행하면 다음의 두 키가 생성된다.
- 공개키 : github_ansible-in-action.pub
- 개인키 : github_ansible-in-action
ssh-keygen -t rsa -f /var/lib/jenkins/.ssh/github_ansible-in-action
Github repository에 공개키 등록
생성한 공개키 코드값을 복사해서 github repository setting으로 이동 후 공개키를 등록한다.
cat /var/lib/jenkins/.ssh/github_ansible-in-action.pub
jenkins 서버에 비밀키 등록
생성한 개인키 값을 jenkins credential 로 저장한다.
credential 은 jenkins 서버 프로세스에서 사용할 민감 데이터를 의미한다.
cat /var/lib/jenkins/.ssh/github_ansible-in-action
- kind
- credential 타입
- Username
- 각 Jenkins Job에서 보여줄 인증키 이름
- Private Key
- 타겟 value
- jenkins 서버에서 생성한 비밀키를 붙여넣는다.
연동 테스트
커넥션 테스트용도로 간단한 Jenkins Item을 생성한다.
아래의 내용을 입력한다.
- github repository url
- Credentials로 등록한 private key
- branch 선택
정상 Build 되면 연동 성공이다.
콘솔로 결과를 확인하고 싶으면 /var/lib/jenkins/workspace 로 이동해서 확인하면 된다.
$ cd /var/lib/jenkins/workspace
정리
이번 포스팅에선 Github과 jenkins를 연동하는 방법을 알아보았다.
다음 포스팅에서 jenkins script를 직접 작성하여 구체적인 CI/CD 동작을 구현해보겠다.
Reference
'Jenkins' 카테고리의 다른 글
[Jenkins] 원격 Jenkins 서버로 CI/CD 환경 구현하기 (0) | 2023.02.09 |
---|---|
[Jenkins] CentOS 원격 서버 / Local MacOS 환경에서 Jenkins 설치하기 (0) | 2022.04.05 |