웹 서비스에 인증하기 위해 비밀번호가 필요한 스크립트가 있습니다. 사전 정의된 사용자에 대한 단일 비밀번호이면 충분하며 가능하면 비밀번호를 안전하게 저장해야 합니다(일반 텍스트 아님).
당연히 보안상의 이유로 스크립트에 비밀번호를 일반 텍스트로 적고 싶지 않아서 스크립트에서 비밀번호를 물어보게 하는데 매번 입력하는 것이 귀찮습니다.
그렇다면 스크립트를 실행할 때마다 비밀번호를 입력할 필요가 없도록 하려면 어떻게 해야 할까요(예: sudo
)?
이 경우 스크립트는 Python으로 되어 있지만, PHP나 Ruby 등 다른 언어에서 재사용할 수 있도록 Bash에서 범용 솔루션으로 구현하는 것이 더 낫다고 생각했습니다.
의사코드:
#!/bin/bash
pw = cache.load() or {
pw = ask_user()
cache.save(pw, 15min)
}
myscript.py pw
답변1
자신만의 비밀번호 저장소를 재발명하지 마세요. 당신이 가지고 있는 것을 사용하십시오. Linux 세계는 주로 다음 사항에 초점을 맞추고 있습니다.그놈 키체인.해마키링을 탐색 및 수정하고 마스터 비밀번호를 설정할 수 있는 편리한 GUI가 제공됩니다. 키링은 다음을 사용하여 명령줄에서 쿼리할 수 있습니다.secret-tool
유용.
secret-tool store --label='Foobar webservice' service foobar account bob
pw=$(secret-tool lookup service foobar account bob)
저장소의 비밀번호는 자동으로 만료되지 않지만 저장소에 대한 액세스는 만료됩니다.
답변2
저도 비슷한 상황이고 gpg
공개/개인 키 암호화를 사용(남용?)합니다. 좋은 점은 대부분의 시스템에서 특정 키에 대해 액세스 제한이 설정되어 있다는 것입니다. 비밀번호는 5~10분 동안 유지되므로 비밀번호를 한 번만 입력하면 계속 사용할 수 있으며 다음 사이에 만료됩니다. 다음과 같은 비사용sudo
결과를 bash
또는 Python
(subprocess.check_output())에 쉽게 넣을 수 있습니다. 암호화, 즉 저장의 경우 접근 제한 비밀번호에 새로운 비밀번호를 제공할 필요도 없습니다.
나는 일반적으로 해당 쌍에 대한 액세스를 유지하고 싶지 않기 때문에 일반적인 공개/개인 키 쌍을 사용하지 않습니다. 나중에 알았어pass
거의 동일한 방식으로 작동하고, 여러 암호 파일을 관리하고, 이 프로그램이 사용하는 몇 가지 동일한 원칙을 기반으로 내가 사용하는 Python 프로그램을 구성합니다.
답변3
여기 있어요:
#!/bin/bash
newTS=`date +%s`
if test -r ~/.password
then
. ~/.password
else
TS=0
fi
if test `expr $newTS - $TS` -gt 900
then
# outdated password record
rm -f ~/.password
printf "Please enter your password: "
read password
printf "export TS=$newTS\nexport password=$password\n" > ~/.password
fi
echo "using password: $password"
~/.password
참고: 이름을 바꾸지 않으면 이전 코드가 파일을 덮어씁니다.