이것이 여러분 대부분에게 순진하게 들릴 것이라는 것을 알고 있지만 저는 아직 Linux를 처음 접하는 사람이므로 양해해 주시기 바랍니다.
몇 가지 명령을 자동화하기 위해 배치 파일을 만들려고 합니다.
이러한 명령 중 하나는 sudo -i
루트의 일부 파일에 액세스해야 하기 때문입니다.
지금까지 내 스크립트는 다음과 같습니다.
#!/bin/bash
sudo -i
cd my-server/bin
./run-server.sh
비밀번호를 묻는 메시지가 표시된 후에 sudo -i
이를 스크립트에서 에뮬레이트할 수 있습니까?
답변1
sudo
스크립트에서 꺼내 사용자가 를 사용하여 스크립트를 호출하도록 할 수 있습니다 sudo scriptname
.
sudo -i
스크립트에서 줄을 제거 하고 다음으로 바꿉니다.
# Must prefix with sudo when calling script
if ! [[ $(id -u) == 0 ]]; then
echo You must call this script using sudo. Aborting.
exit 99
fi
답변2
공정한 질문입니다. 그러나 현재 시도/구상하고 있는 방식으로 진행하지 않는 것이 좋습니다. 귀하의 접근 방식을 피하는 이유는 다른 사용자/공격자가 읽을 수 있는 텍스트 파일에 비밀번호를 입력해야 하기 때문입니다. 이제 사용자(및 루트)만 읽을 수 있도록 파일을 600 권한으로 설정할 수 있지만 스크립트 하위 명령이 어딘가에 기록되어 잠재적인 공격자가 암호를 다시 사용할 수 있는지 확실하지 않습니다. . 실제 질문은 루트로 자동 로그인하기 위해 스크립트가 필요한 이유는 무엇입니까?
자동화된 프로세스인가요, 아니면 스크립트를 있는 그대로 실행할 때 표시되는 비밀번호 프롬프트에 간단히 응답할 수 없는 다른 이유가 있나요? 자동화된 프로세스인 경우 sudo 줄을 제거하고 루트 사용자 cron에 스크립트 호출을 추가하면 됩니다. 간단한 Google 검색으로 크론 작업을 설정하는 방법에 대한 수많은 문서가 있지만 다음으로 시작할 수 있습니다.이것)
게다가 이것은 단순히 다른 스크립트를 호출하는 스크립트이다. run-server.sh를 루트에서만 실행 가능하게 만든 다음 이를 사용하여 sudo su
루트에 로그인한 다음 /my-server/bin/run-server.sh
. 다시 말하지만, 일정에 따라 자동화해야 하는 경우 이를 루트의 크론에 추가할 수 있습니다.
경고:스크립트를 작성하지 마세요.특히명령줄에 입력하지 마세요(기록됩니다).
echo 'PASSWORD' | sudo -S /my-server/bin/run-server.sh