SSH를 통해 스크립트를 실행할 때 권한이 거부되었습니다.

SSH를 통해 스크립트를 실행할 때 권한이 거부되었습니다.

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항상 비밀번호를 묻는 메시지가 표시됩니다.

관련 정보