루트 사용자로 생성된 bash 스크립트가 있고 my_script.sh
그 일부는 sudo 사용자로 전환해야 합니다.
heredocs를 시도했는데 작동하지만 문제는 bash 스크립트에서 변수를 앞뒤로 사용할 수 없다는 것입니다.
#!/usr/bin/bash
#Name of my Script is my_script
read -p "Enter hostname : " hostname
hostnamectl set-hostname $hostname
whoami
sudo -i -u my_username bash << 'EOF'
whoami
mkdir ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
read -p "Enter Database Name : " dbname
echo "Database $dbname has been added to system!"
EOF
이 접근 방식의 문제점은 "EOF"를 사용하면 여기 문서의 변수를 사용할 수 없고 $hostname
"EOF"를 사용하지 않으면 $dbname
여기 문서에서 생성된 변수와 같은 다른 변수를 사용할 수 없다는 것입니다.
언급된 방법을 시도 중입니다.여기
#!/usr/bin/bash
if [ $(id -u) -eq 0 ]; then
user=$1
dir=$2
cd "$dir"
exec su "$user" "$0" -- "$@"
fi
whoami
터미널에서:./my_script.sh my_username
실수: sh: 0: Can't open ./my_script.sh
my_username에는 sudo 권한이 있습니다.
시스템 정보: 우분투 20.04
내가 어떻게 알아내지?실수?
답변1
단일 쉘 내에서 실행할 필요가 없습니다.
루트로 다음 명령을 실행할 수 있습니다.
mkdir ~my_username/.ssh
chmod 700 ~my_username/.ssh
nano ~my_username/.ssh/authorized_keys
chown -Rh my_username ~my_username/.ssh
sudo를 한 번 호출하면 다음 작업을 수행할 수 있습니다.
read -p "Enter Database Name : " dbname
echo "Database $dbname has been added to system!"
또는 ${dbname} 형식으로 변수를 지정해 보세요.