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 파일에 자신을 추가하고 비밀번호가 필요 없이 권한으로 스크립트를 실행하도록 설정할 수 있습니다.