Jenkins는 쉘 스크립트를 실행하고 scp를 사용하여 비밀번호 없는 전송 실패를 전달합니다.
문제: Jenkins는 기본적으로 jenkins 사용자를 사용하여 시작합니다. jenkins 사용자는 ssh 비밀번호 없는 로그인을 수행할 권한이 없으므로 실행이 실패합니다.
참고: 구성 후 Linux 이중 시스템 상호 신뢰, jenkins 쉘 스크립트에서 scp 비밀번호 없는 전송 조건을 충족하려면 대상 시스템에 공개 키도 추가해야 합니다.
1. 로그인 확인
1. jenkins 사용자 전환
# su jenkins
전환 후에도 여전히 루트 계정
2. 분석 및 해결 방법:
2.1 /etc/passwd 파일의 /bin/bash는 다음과 같아야 합니다. yum을 설치하면 /bin/false가 됩니다.
# vim /etc/passwd
jenkins: x:990:988:Jenkins 자동화 서버:/var/lib/jenkins: /bin/false( bash)
bin/false를 /bin/bash로 변경
전환 수행 다시
# su jenkins
bash-4.1$
2.2? 결과적으로 명령 프롬프트의 사용자 이름은 jenkins가 아니라 bash-4.1이 되었습니다. $. 그 이유는 jenkins를 설치할 때 jenkins가 jenkins 사용자만 생성하고 사용자에게 홈 디렉터리를 제공하지 않았기 때문입니다.
# vim ~/.bash_profile
추가 ?export PS1='[\u@\h \W]\$' 파일 끝에 파일을 실행하고 변경 사항을 적용합니다. 항목이 작동합니다
# source ~/.bash_profile
성공 여부 확인 # su jenkins
2. jenkins 시스템 사용자에 대해 비밀번호 없는 로그인 활성화
1. Jenkins 사용 중 sudo 명령을 사용하는 경우 스크립트에서 다음 오류가 발생할 수 있습니다:
sudo: tty가 없고 Askpass 프로그램이 지정되지 않았습니다.
이는 sudo 명령을 실행할 때 Jenkins 서버의 컨텍스트가 올바르지 않기 때문입니다. , 이 명령 실행 시 예외가 발생합니다.
2.1 해결 방법:
# sudo visudo
끝에 jenkins ALL=(ALL) NOPASSWD: ALL
2.2를 추가하세요. file jenkins를 다시 시작하고 테스트
# su jenkins
# sudo su -s /bin/bash jenkins
테스트에 성공했으며 Jenkins 비밀번호 없는 로그인은 성공적인.
PS: 위 파일을 수정하기 위해 실수로 /etc/sudoers의 권한을 수정한 경우 다음 오류가 발생합니다.
sudo :/etc/sudoers는 누구나 쓰기 가능합니다.
sudo : 유효한 sudoers 소스를 찾을 수 없습니다. 종료 중
sudo : 폴링 플러그인을 초기화할 수 없습니다.
이것은 Linux의 보호 메커니즘입니다.
따라서 위의 오작동이 발생하면 다음 명령을 실행하여 문제를 해결해야 합니다:
$ pkexec chmod 0440 /etc/sudoers
3. SSH 비밀번호 없는 로그인을 활성화합니다. Jenkins 사용자
1. ssh 설치
# yum install ssh
1.1 부팅 시 SSH 서비스가 자동으로 시작되도록 설정
# sudo systemctl 활성화 sshd
1.2 SSH 시작
#?sudo systemctl start sshd
2. 젠킨스 사용자 키 인증서 생성
# su jenkins
# ssh-keygen -t rsa
2.1 생성 성공 여부 확인
#?/var/lib/jenkins/.ssh/ p>
# ls p>
3. 공개 키를 대상 Linux 시스템으로 전송합니다.
ssh-copy-id -i /var/lib/jenkins/.ssh/id_rsa .pub root@target ip:path p>
---------------------- ------------- ----------- --------
참조:/weixin_43840640/article/details/90371472