본문 바로가기
디프만

[CI/CD] jenkins pipeline에서 SSH 사용하기

by 위대한초밥V 2023. 12. 31.

jenkins로 CI/CD를 구축하면서 ssh로 로그인을 하는 방법을 소개한다.

👋 잠깐만~
SSH(Secure Shell)란 무엇일까? SSH는 네트워크 상 다른 컴퓨터 쉘을 사용할 수 있게하는 프로토콜이다. SSH를 사용하면, 원격에서 네트워크 상의 컴퓨터에 접속할 수 있다.

 

✅ 작업 단계는 다음과 같다.

1. ssh agent 플러그인 설치

2. ssh 인증서 생성

3. jenkins credentials로 ssh 인증 정보 등록

4. pipeline에 ssh 추가

 

✅ 작업 환경

Jenkins는 docker 기반에서 실행된다.

1. ssh agent 플러그인 설치

Dashboard > Manage Jenkins > Plugins에서 SSH Agent Plugin을 검색하여 설치한다.

 

2. ssh 인증서 생성

docker 기반에서 실행하고 있기 때문에, docker로 jenkins를 접속했다.

.ssh 폴더가 없는 경우 생성하고 해당 디렉토리로 이동한다.

 

1. ssh-keygen 명령어로 public key와 private key를 생성한다.

+) ssh 공개키에 대한 상세 내용은 아래 블로그글을 참고하면 좋다.

https://storycompiler.tistory.com/112

 

[Ubuntu/Linux] ssh 공개키의 모든 것

비공개 서버에 접속하기 위해서는 인증절차를 거쳐야 합니다.그리고 그 인증절차 중에 가장 널리 사용된 것이 ID/비번 입력방식이지요.하지만, 네트워크 상에서 ID/비번이 그대로 노출되는 문제

storycompiler.tistory.com

$ ssh-keygen -t rsa -b 4086
Generating public/private rsa key pair.
Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa): dev-key # key 이름 지정
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in dev-key
Your public key has been saved in dev-key.pub

.ssh 폴더에, dev-key와 dev-key.pub 파일이 생성된 것을 확인할 수 있다.

 

2. 생성한 공개키를 접속할 원격 호스트에 복사한다.

$ ssh-copy-id -i dev-key.pub -p {port 번호} {접속할 호스트 이름}@{접속 호스트 서버 ip 주소}

 

3. ssh 접속이 되는지 확인한다.

 

3. jenkins credentials로 ssh 인증 정보 등록

Dashboard > Manage Jenkins > Credentials에서 인증 정보를 등록한다.

  • Kind: SSH Username with private key
  • ID: pipeline에서 사용하는 인증 정보 id이다. 중복 불가
  • dscription, username: 생략가능
  • private key: Enter directly 클릭한다. ssh-keygen으로 생성한 private key이다.(pub가 안붙은거!)
    • .ssh 폴더에서 cat {private key 파일 이름}으로 확인하면 된다.
  • Passpharse: ssh-keygen으로 인증키 생성할 때 입력한 password이다.

 

4. pipeline에서 ssh 추가

1. Dashboard에서 New Item을 클릭하고, 파이프라인 이름을 입력하고 pipeline을 선택한다.

 

2. item 이름 > configuration > Advanced Project Options 에서 Pipeline script를 업데이트한다.

pipeline {
    agent any
    stages {
		 ...
        stage('Deploy') {
            steps {
                sshagent(credentials: ['dev_server']) {
                    sh '''
                        ssh -o StrictHostKeyChecking=no -p {port 번호} {host name}@{host ip} uptime
                    '''
                }
            }
        }
    }
}

 

3. Item을 빌드하여, 접속되는지 확인한다.

반응형