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
$ 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을 빌드하여, 접속되는지 확인한다.