쉘 스크립트에서 비밀번호를 사용하는 방법

쉘 스크립트에서 비밀번호를 사용하는 방법

3개의 로그 파일에서 여러 파일을 찾는 스크립트를 작성 중입니다. 로그 파일 중 하나가 수퍼유저로 생성되고 실행될 때마다 암호를 묻는 메시지가 표시됩니다. 매번 비밀번호를 입력할 필요가 없도록 이것을 동일한 스크립트에 어떻게 넣을 수 있습니까?

for ...
su superuser -c "grep $file /u/spool/ftp/logs/alog>> /u/home/abc/tempo/files.txt"
if [ $? -eq 0 ]; 
   then 
       echo $file >> /u/home/abc/tempo/ftpxfer.txt;
   fi
 done

답변1

먼저, 파일(특히 사용자 소유 스크립트)에 슈퍼유저 비밀번호를 설정하는 것은아주 나쁜 생각, 해당 사용자에 대한 액세스 권한을 얻은 사람은 누구나 쉽게 루트 권한을 얻을 수 있기 때문입니다.

즉, sudo파이프에서 비밀번호를 읽는 옵션을 제공하는 스크립트에서 사용할 수 있습니다.

pass='1234abc'
for ... 
    echo $pass | sudo -S "grep $file /u/spool/ftp/logs/alog>> /u/home/abc/tempo/files.txt"
    if [ $? -eq 0 ]; then
        echo $file >> /u/home/abc/tempo/ftpxfer.txt
    fi
done

sudo또는 -configure sudo(루트/수퍼유저로)를 사용하여 루트가 전체 스크립트를 실행하도록 할 수 있습니다. visudo그러면 sudo 구성 파일에 다음을 추가하여 비밀번호 없이 스크립트를 실행할 수 있습니다.

%wheel ALL=(ALL) NOPASSWD: /path/to/script

그러면 다음과 같이 스크립트를 단순화할 수 있습니다(일반 텍스트 비밀번호가 필요하지 않음).

for ... 
    grep $file /u/spool/ftp/logs/alog>> /u/home/abc/tempo/files.txt
    if [ $? -eq 0 ]; then
        echo $file >> /u/home/abc/tempo/ftpxfer.txt
    fi
done

답변2

루트 비밀번호를 알고 있는 경우

ssh-keygen
ssh-copy-id root@localhost
  • ssh-keygen의 기본값을 수락하고 passwd를 입력하지 마십시오.
  • 필요한 경우 루트를 올바른 사용자로 바꾸십시오.

그런 다음 스크립트에서 su.ssh root@localhost

답변3

@wraeth가 그의 답변에서 위험하다고 지적했듯이 그의 제안이 최선의 접근 방식이 될 것이지만 다음을 사용할 수도 있습니다.예상되는.

보안 문제를 염두에 두고 있는 경우 이와 같은 상황에 유용한 대화형 스크립트 답변을 작성할 수 있습니다. 또한 슈퍼유저 비밀번호가 있는 경우 sudoers 파일에 자신을 추가하고 비밀번호가 필요 없이 권한으로 스크립트를 실행하도록 설정할 수 있습니다.

관련 정보