스크립트에서 su에 비밀번호를 전달할 수 없습니다.

스크립트에서 su에 비밀번호를 전달할 수 없습니다.

빌드 스크립트를 작성 중입니다. 스크립트는 마지막에 파일을 복사해야 합니다. 파일은 다른 사용자의 홈 디렉터리에 저장되며 해당 파일은 두 번째 사용자에게도 속해야 합니다. 내 첫 번째 시도는 다음과 같이 su를 사용하는 것이었습니다.

su fbgs -c "cp fbgs.jar /home/fbgs/server/plugins/"

이것은 명령줄에서 작동하지만 스크립트에 넣을 때 자동으로 입력되는 암호가 필요합니다. 그래서 다음 명령을 시도했습니다.

echo Password | su -S fbgs -c "cp fbgs.jar /home/fbgs/server/plugins/"

그러나 나는 다음과 같은 결과를 얻습니다.

su: must be run from a terminal

어떻게 작동하게 합니까?

답변1

이 특정 프로세스에 대해 sudo를 설정하고 특정 명령 NOPASSWD를 설정하는 것을 고려하십시오. 그러면 일반 텍스트 비밀번호를 에코할 필요가 없습니다(어쨌든 꽤 나쁩니다). 또한 TTY를 요구하거나 요구하지 않을 수 있는 sudo 플래그가 있습니다.

예.

/etc/sudoers.d/mycmd:

theuser ALL=(fgbs) NOPASSWD: cp fbgs.jar /home/fbgs/server/plugins

my-build-script.sh:

#!/bin/sh
/usr/bin/sudo -H -u fbgs cp fbgs.jar /home/fbgs/server/plugins

관련 정보