기타

[Jenkins] SSH 사용 - pipeline SSH Agent

royleej9 2022. 2. 1. 00:02

[Jenkins] SSH 사용 - pipeline SSH Agent

작업 순서

  1. SSH Agent 플러그인 설치
  2. SSH 인증서 생성
  3. jenkins에 ssh 인증 정보 등록
  4. pipeline에서 ssh 사용하기
  5. Bad configuration option 에러 발생시

1. SSH Agent 플러그인 설치

  1. Jenkins 관리 > 플러그인 관리 > 설치 가능 탭 선택 > SSH Agent 검색 후 설치

2. SSH 인증서 생성

  1. jenkins 설치 폴더 또는 docker 사용시 jenkins_home volume 위치로 이동
  2. docker 기반 jenkins 설치했을 경우 jenkins_home 위치에서 .ssh 폴더가 없는 경우 생성
  • ex) jenkins_home: /home/asd/doc/jenkins
$ cd /home/asd/doc/jenkins
# jenkins_home 경로에 .ssh 폴더 생성
$ mkdir .ssh
$ cd .ssh
# ssh 인증서 생성
$ ssh-keygen -t rsa -b 4086
Generating public/private rsa key pair.
Enter file in which to save the key (/home/asd/.ssh/id_rsa): /home/asd/doc/jenkins/.ssh/jenkins_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/asd/doc/jenkins/.ssh/jenkins_rsa
Your public key has been saved in /home/asd/doc/jenkins/.ssh/jenkins_rsa.pub
The key fingerprint is:

# .ssh 폴더에 아래 2개의 파일이 생성된 것을 확인
# jenkins_rsa / jenkins_rsa.pub
  1. 공개키를 원격 호스트에 복사 (접속 대상)
$ ssh-copy-id -i /home/asd/doc/jenkins/.ssh/jenkins_rsa.pub x@192.168.0.7
  1. ssh 접속이 되는지 확인
$ ssh -i jenkins_rsa test@192.168.0.7

3. jenkins에 ssh 인증 정보 등록

https://www.jenkins.io/doc/book/using/using-credentials/

  1. jenkins 관리 > Manage Credentials
  2. Stores scoped to Jenkins > global > Add Credntials 선택
  3. ssh 정보 입력
Kind : SSH Username with private key
ID : 중복되지 않는 인증 ID - 해당 ID 값으로 pipline에서 인증 정보를 사용
username : 생략
private key : ssh-keygen 으로 생성한 private key 내용 (ex: jenkins_rsa)  
              cat jenkins_rsa 명령어로 출력되는 내용
passphrase : ssh-keygen으로 인증키 생성시 입력한 password


4. pipeline에서 ssh 사용하기

  1. 새로운 Item 생성 > Pipeline 선택
  2. pipeline 항목에 테스트 내용 입력 후 저장
pipeline {
    agent any
    stages {
        stage('test ssh') {
            steps {        
                sshagent (credentials: ['jenkins-ssh']) {
                sh """
                    ssh -o StrictHostKeyChecking=no ${TARGET_HOST} "pwd"
                """
                }
            }
        }

        stage('multiline ssh') {
            steps {        
                sshagent (credentials: ['jenkins-ssh']) {
                sh """
                    ssh -o StrictHostKeyChecking=no ${TARGET_HOST} '
                    rm -rf test
                    mkdir test
                    cd test
                    mkdir test2
                    cd test2
                    pwd
                    '
                """
                }
            }
        }
    }
    environment {
        TARGET_HOST = "test@192.168.0.7"
    }
}
  1. 해당 Item의 Build Now를 클릭하여 실행하여 ssh 접속 후 경로가 출력 되는 것을 확인

5. Bad configuration option 에러 발생시

  • 원인
    • Host key checking : 터미널에서 ssh 접속시 아래와 같은 메세지가 출력되는 경우 jenkins에서 접속시 발생Are you sure you want to continue connecting (yes/no)?
  • 해결
    • Host key checking을 비활성화 하는 옵션을 한번 이상 사용
    ssh -o StrictHostKeyChecking=no test@192.168.0.7 "pwd"