scp
일부 패키지를 다운로드하고 설치하는 스크립트를 작성했습니다 . 실행할 때 SSH 키가 호스트에 추가됩니다.
[root@HostB ~]# ./myscript
모든 것이 잘 작동하며 패키지는 비밀번호를 입력하지 않고 scp를 통해 다운로드됩니다.
이 스크립트를 실행해야 하는데 ssh
시도하면
[root@HostA ~]# ssh root@HostB "./myscript"
권한 거부(공개 키, 비밀번호) 오류가 발생합니다.
사용하려고 하면 myscript의 명령이 실행될 ssh -t
때 비밀번호 쿼리가 발생합니다 .scp
답변1
답변 = "bash" 추가
SSH를 통해 머신에 연결하고 Jenkinsfile에서 스크립트를 실행하는 방법: 파일은 "/home/username/Shell Script Directory" 디렉토리에 있는 "Shell Script.sh"입니다.
Jenkins 문서에서:
sh "sudo ssh -i /home/user/myPemFile.pem -o StrictHostKeyChecking=no -n [email protected] \"bash /home/username/Shell\\ Script\\ Directory/Shell\\ Script.sh\" "
답변2
PasswordAuthentication
내 생각엔 당신 이 "예"로 설정하지 않았기 때문인 것 같아요 .
PasswordAuthentication yes
sshd_config
기기에 추가 하고 다시 시도해 보세요. 비밀번호를 묻는 메시지가 나타납니다.
또 다른 해결책은 HostA에서 콘텐츠를 가져와 HostB의 ~/.ssh/id_rsa.pub
파일 에 추가하는 것입니다.~/.ssh/authorized_keys
이제 비밀번호 인증이 활성화되었으므로 다음 명령을 사용하여 인증 키를 설치할 수 있습니다.
ssh-copy-id HostB
답변3
scp
패키지를 다운로드하기 위해 스크립트 내부를 사용하고 있다고 언급하셨습니다 . 여기에 문제가 있습니다. 문제는 다음과 같이 ssh를 실행할 때입니다.
ssh user@host command
...실행 중인 스크립트에 할당된 의사 터미널이 없습니다. scp
비밀번호를 묻는 메시지를 표시해 보지만 의사 터미널이 필요하므로 의사 터미널이 없으면 권한 거부 오류가 발생합니다(이는 비밀번호 인증 시도 실패로 인한 것입니다). 을 사용하면 ssh -t
의사 터미널이 있고 비밀번호 프롬프트가 작동합니다. scp
원격으로 실행할 때는 비밀번호를 입력하라는 메시지가 표시되지만 대화형 SSH 세션에서 실행할 때는 비밀번호를 입력하라는 메시지가 표시되지 않는 이유를 파악해야 합니다 . 이것은 다른 질문입니다.
답변4
여전히 비밀번호를 입력하라는 것 같습니다. HostA에서 HostB로 SSH를 실행할 때 비밀번호를 묻는 메시지가 표시됩니까?
그렇다면 다음 을 포함하도록 ssh_config
파일( RHEL/Centos의 경우)을 변경해야 합니다 ./etc/ssh/sshd_config
PasswordAuthentication no
yes로 설정 하면 PasswordAuthentication
항상 비밀번호를 묻는 메시지가 표시됩니다.