su를 사용하여 해당 사용자로 나머지 bash 스크립트를 실행하려면 어떻게 해야 합니까?

su를 사용하여 해당 사용자로 나머지 bash 스크립트를 실행하려면 어떻게 해야 합니까?

루트 사용자로 생성된 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} 형식으로 변수를 지정해 보세요.

관련 정보