원격 서버에서 쉘 스크립트를 실행하고 싶습니다. 스크립트는 비밀번호를 요구하지 않고(또는 sudo
스크립트에서 사용하지 않고) 루트로 실행되어야 합니다. 누구든지 나에게 조언을 해줄 수 있습니까?
답변1
사용된 솔루션 외에도 sudo
스크립트 친화적인 구성이 가능합니다(특정 명령에 대한 추가 비밀번호 프롬프트 없음) 또는설정값보안이 쉽지 않은 솔루션의 경우 command= 제한을 사용하여 SSH 공개 키 인증을 사용하는 것이 좋습니다.
이렇게 하려면 아직 수행되지 않은 경우 루트 사용자에 대해 비밀번호 없는 로그인을 활성화하고( PermitRootLogin without-password
in) /etc/ssh/sshd_config
설명과 같이 command= 매개변수를 사용하여 SSH 공개 키(또는 이 경우를 위해 생성된 특수 키)를 추가 해야 합니다./root/.ssh/authorized_keys
이 답변.
답변2
스크립트에 루트 비밀번호를 입력할 필요가 없습니다.
플랜 A
서버의 스크립트를 suid하고 루트 또는 사용자 그룹만 읽기/실행 가능하게 만듭니다.
chmod 4750 script.sh
chgrp your_group script.sh
이 그룹에 사용자를 추가하는 것을 잊지 마세요.
ssh user@XXXX '/path/to/script.sh'
그런 다음 스크립트를 실행할 수 있습니다 .
플랜 B
SSH 키를 생성하고 공개 키를 원격 서버에 복사합니다. 이 방법을 사용하려면 루트로 로그인해야 하지만 비밀번호는 필요하지 않습니다. (openssl을 사용하여 개인 키를 해독하는 것을 잊지 마세요)
개인키를 분실하면 매우 위험합니다.
답변3
루트 사용자 없이 솔루션 저장
클라이언트에서 SSH 키 생성
고객: ssh-keygen
서버에 복사하세요
섬기는 사람:mkdir ~/.ssh
고객:scp ~/.ssh/id_rsa.pub serveruser@server:~/.ssh/authorized_keys
사용자가 비밀번호 없이 sudo를 사용할 수 있도록 허용
섬기는 사람:
visudo
serveruser ALL=(ALL) NOPASSWD: /usr/bin/foo /usr/sbin/bar
이제 다음과 같은 명령을 실행할 수 있습니다.
고객:ssh serveruser@server 'sudo foo && bar'
// ssh -t ...
Sudo를 사용해야 하는 일부 서버