개요
Jenkins에서 원격 서버에 접근하여 명령어를 실행하기 위해서 SSH Agent를 어떻게 사용하는지, 그 방법을 정리해보려고 합니다.
사전 준비
실습 진행을 위해서 Jenkins가 설치되어 있어야 합니다!
위 깃허브 가이드를 참고하여 Jenkins를 도커로 설치해주세요.
SSH Agent
SSH Agent는 SSH 키를 관리하거나, 원격 서버에 대한 인증을 자동화할 수 있는 도구입니다.
젠킨스에서는 SSH Agent라는 별도의 플러그인을 통하여 Pipeline에서 SSH 키를 사용할 수 있고,
이를 통해서 직접 원격 서버에 접근하여 명령어를 실행하거나 파일 등을 전송할 수 있습니다.
<br.
SSH Agent 설치
Jenkins를 문제없이 설치하셨다면 SSH Agent라는 플러그인을 별도로 설치해주셔야 합니다!

왼쪽 메뉴의 Available plugins에서 SSH Agent를 검색하여 인스톨 버튼으로 설치가 가능합니다.
저는 이미 설치가 되어있기 때문에 Installed Plugins에 위 사진처럼 나오고 있네요.
SSH 키 생성
원격 서버측에서 ssh-keygen 명령어로 키 페어를 생성해주도록 하겠습니다.
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
생성된 .pub키는 ~/.ssh/authorized_keys에 등록해주세요.
Jenkins에 SSH 인증 정보 등록
원격 서버측에서 생성된 Private key 정보를 Jenkins SSH 인증 정보에 등록해줄겁니다.
젠킨스의 SSH Agent에서 해당 키 정보를 바탕으로 원격 서버와 키를 대조한 후,
키 페어가 검증이 된다면 원격 서버로 정상적으로 접근이 될겁니다.
Jenkins 관리 -> Credentials -> Global credentials로 이동하여 “Add Credentials`를 클릭해주세요.

Kind: SSH Username with private keyScope: GlobalID: 원하는 IDUsername: 원격 서버의 접속하고자 하는 사용자 이름Private Key:Enter directly를 선택하고, 생성한 개인 키(~/.ssh/id_rsa) 내용을 붙여주면 됩니다.
Jenkins Pipeline - SSH Agent 사용해보기
젠킨스 파이프라인을 다음과 같이 작성하고 테스트해봅시다.
pipeline {
agent any
stages {
stage('Test echo') {
steps {
// SSH Agent를 사용하여 원격 서버에 접속
sshagent(credentials: ['ssh-agent-private-key']) {
// 원격 서버에서 명령어 실행
sh """
ssh -o StrictHostKeyChecking=no jhlee37@192.168.219.111 '
echo Hello, jhlee37!
'
"""
}
}
}
// 여러 명령어를 실행
stage('Test Multiple Commands') {
steps {
sshagent(credentials: ['ssh-agent-private-key']) {
sh """
ssh -o StrictHostKeyChecking=no jhlee37@192.168.219.111 '
echo "Hello, jhlee37!"
echo "Test Completed!!!!!"
'
"""
}
}
}
}
}
StrictHostKeyChecking=no옵션을 사용하여서 호스트 키 확인을 비활성화할 수 있습니다!
빌드 결과는 어떤지 볼까요?

성공이네요!