본문으로 건너뛰기

Jenkins에서 원격 시스템의 명령을 비밀번호 없이 수행하는 설정

Jenkins 에서 대상 서버에 파일을 전달 하기 위해 CLI 명령어 (예: Ubuntu의 rsync)를 이용하여 Jenkins에서 원격 시스템의 명령을 비밀번호 없이 수행하려면 Jenkins 계정에 대해 SSH 키 기반 인증을 설정하고 필요한 권한을 부여해야 합니다. 다음 단계를 따라 설정할 수 있습니다.

  1. Jenkins 서버에서 SSH 키 생성:

    • Jenkins 서버에서 SSH 키를 생성합니다. 이미 키가 있다면 이 단계를 건너뛰세요.
      sudo -u jenkins ssh-keygen -t rsa -b 4096 -C "jenkins@[소스 호스트명 또는 IP 주소]"
  2. 공개 키 복사:

    • 생성된 공개 키를 원격 서버로 복사합니다. Jenkins 계정으로 실행해야 합니다.
      sudo -u jenkins ssh-copy-id [로그인 계정 ID]@[대상 호스트명 또는 IP 주소]
  3. 원격 서버의 권한 설정:

    • 원격 서버에서 ~/.ssh 디렉토리와 authorized_keys 파일의 권한이 올바르게 설정되어 있는지 확인합니다.
      chmod 700 ~/.ssh
      chmod 600 ~/.ssh/authorized_keys
  4. SSH 데몬 설정 확인:

    • 원격 서버에서 SSH 데몬 설정 파일(/etc/ssh/sshd_config)을 열어 PasswordAuthenticationPubkeyAuthentication 설정이 올바르게 되어 있는지 확인합니다.
      sudo nano /etc/ssh/sshd_config
    • 다음 설정이 포함되어 있는지 확인하세요:
      PubkeyAuthentication yes
  5. SSH 서비스 재시작:

    • 원격 서버에서 SSH 서비스를 재시작하여 변경 사항을 적용합니다.
      sudo systemctl restart ssh
  6. 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에서 원격 시스템의 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]/[대상 디렉토리]