Jenkins에서 원격 시스템의 명령을 비밀번호 없이 수행하는 설정
Jenkins 에서 대상 서버에 파일을 전달 하기 위해 CLI 명령어 (예: Ubuntu의 rsync)를 이용하여 Jenkins에서 원격 시스템 의 명령을 비밀번호 없이 수행하려면 Jenkins 계정에 대해 SSH 키 기반 인증을 설정하고 필요한 권한을 부여해야 합니다. 다음 단계를 따라 설정할 수 있습니다.
-
Jenkins 서버에서 SSH 키 생성:
- Jenkins 서버에서 SSH 키를 생성합니다. 이미 키가 있다면 이 단계를 건너뛰세요.
sudo -u jenkins ssh-keygen -t rsa -b 4096 -C "jenkins@[소스 호스트명 또는 IP 주소]"
- Jenkins 서버에서 SSH 키를 생성합니다. 이미 키가 있다면 이 단계를 건너뛰세요.
-
공개 키 복사:
- 생성된 공개 키를 원격 서버로 복사합니다. Jenkins 계정으로 실행해야 합니다.
sudo -u jenkins ssh-copy-id [로그인 계정 ID]@[대상 호스트명 또는 IP 주소]
- 생성된 공개 키를 원격 서버로 복사합니다. Jenkins 계정으로 실행해야 합니다.
-
원격 서버의 권한 설정:
- 원격 서버에서
~/.ssh
디렉토리와authorized_keys
파일의 권한이 올바르게 설정되어 있는지 확인합니다.chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
- 원격 서버에서
-
SSH 데몬 설정 확인:
- 원격 서버에서 SSH 데몬 설정 파일(
/etc/ssh/sshd_config
)을 열어PasswordAuthentication
과PubkeyAuthentication
설정이 올바르게 되어 있는지 확인합니다.sudo nano /etc/ssh/sshd_config
- 다음 설정이 포함되어 있는지 확인하세요:
PubkeyAuthentication yes
- 원격 서버에서 SSH 데몬 설정 파일(
-
SSH 서비스 재시작:
- 원격 서버에서 SSH 서비스를 재시작하여 변경 사항을 적용합니다.
sudo systemctl restart ssh
- 원격 서버에서 SSH 서비스를 재시작하여 변경 사항을 적용합니다.
-
Jenkins 작업 설정:
- Jenkins 작업에서 SSH 에이전트를 사용하여 SSH 키를 추가하고, 이를 사용하도록 설정합니다. Jenkins 작업의 "Execute shell" 섹션에 다음 명령을 추가합니다:
rsync -avq --delete --chown=qcn:qcn --no-perms /var/lib/jenkins/workspace/[Jenkins 프로젝트 ID]/** [로그인 계정 ID]@[호스트명 또는 IP 주소]:/home/[로그인 계정 ID]/[대상 디렉토리]
- Jenkins 작업에서 SSH 에이전트를 사용하여 SSH 키를 추가하고, 이를 사용하도록 설정합니다. Jenkins 작업의 "Execute shell" 섹션에 다음 명령을 추가합니다:
이 단계를 따라 설정하면 Jenkins에서 원격 시스템의 rsync
명령을 비밀번호 없이 수행할 수 있습니다.
또는 배포만을 위한 제한된 계정을 만들어 서버간의 설정을 하지 않고 간단하게 파일 전달이 가능합니다.
- Jenkins 작업에서 SSH 에이전트를 사용하여 SSH 키를 추가하고, 이를 사용하도록 설정합니다. Jenkins 작업의 "Execute shell" 섹션에 다음 명령을 추가합니다:
sshpass -p 'your_password' scp -r -o StrictHostKeyChecking=no /var/lib/jenkins/workspace/[Jenkins 프로젝트 ID] [로그인 계정 ID]@[호스트명 또는 IP 주소]:/home/[로그인 계정 ID]/[대상 디렉토리]