Jenkins Remote CLI를 사용하여 Jenkins 서버를 원격으로 구성하려고 합니다. 저는 jenkinsci/blueocean 도커 컨테이너를 실행 중입니다.
Jenkins 서버에서 SSHD를 활성화하려면:
1) 시간http://localhost:8080/configureSecurity/: SSHD 포트 활성화 -> 무작위여기에 이미지 설명을 입력하세요
2) 있음http://localhost:8080/user/baymac/configure: 로컬 컴퓨터의 공개 키를 추가했습니다.여기에 이미지 설명을 입력하세요
이 명령을 사용하여 SSH 포트를 감지한 후:
curl -D- -o/dev/nul -s http://localhost:8080
로컬 컴퓨터에서 SSH를 시도하는 중:
ssh -l baymac -p 46653 localhost who-am-i
에러 메시지:
ssh: 호스트 localhost 포트 46653에 연결: 연결이 거부되었습니다.
Jenkins CLI 클라이언트를 사용하여 로컬 시스템에서 Jenkins 서버로 SSH를 시도하는 중:
java -jar jenkins-cli.jar -s http://localhost:8080 -i ~/.ssh/id_rsa -ssh -user baymac who-am-i
다음과 같은 오류 메시지가 나타납니다.
/home/parichay/.ssh/id_rsa에 대한 암호 입력: 2019년 3월 24일 오전 6:38:56 org.apache.sshd.client.config.hosts.ConfigFileHostEntryResolver reloadHostConfigEntries INFO: 해결EffectiveResolver(baymac@localhost:46653)가 1개 항목을 로드함 /home/parichay/.ssh/config org.apache.sshd.common.RuntimeSshException에서: 세션을 가져오지 못했습니다. org.apache.sshd.client.future.DefaultConnectFuture.getSession(DefaultConnectFuture.java:59)에서 hudson.cli.SSHCLI.sshConnection(SSHCLI.java:104)에서 hudson.cli.CLI._main(CLI.java:608)에서 ) at hudson.cli.CLI.main(CLI.java:427) 원인: java.net.ConnectException: sun.nio.ch.UnixAsynchronousSocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.UnixAsynchronousSocketChannelImpl에서 연결이 거부되었습니다. sun.nio.ch.UnixAsynchronousSocketChannelImpl.java:198의 sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213)의 sun.nio.ch.EPollPort에서 완료Connect(UnixAsynchronousSocketChannelImpl.java:252) $EventHandlerTask.run(EPollPort.java:293) at java.lang.Thread.run(Thread.java:748)
작동 중인 다른 장치에 SSH를 연결하려고 했기 때문에 올바른 암호를 입력했습니다.
추가 정보:
다음 명령을 사용하여 도커를 실행합니다.
sudo docker run \
--rm \
-u root \
-p 8080:8080 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME":/home \
--name jenkins \
Jenkinsci/blueocean
HTTP 인증이 작동합니다:
java -jar jenkins-cli.jar -s http://localhost:8080/ -auth baymac:<api_token> who-am-i
메시지:
인증 : baymac 권한 : 인증
Docker 컨테이너 bash 명령줄 내부:
docker exec -ti jenkins bash
명령 1:
bash-4.4# netstat -natp | grep sshd
메시지"
"NO_OUTPUT"
명령 2
bash-4.4# ps aux | grep sshd
메시지:
2280 루트 0:00 grep sshd
이 오류를 디버깅할 수 없습니다. 이 오류에 대한 포인터가 정말 도움이 될 것입니다. 일부 제안에서는 docker run
명령이 SSH 포트를 전달해야 하는 방향을 알려줍니다 . 무작위 포트에서 SSH 서버를 실행하기 위해 Jenkins 컨테이너 내부를 선택했기 때문에 수행 방법을 이해할 수 없습니다.