curl
여러 번 실행되는 스크립트가 있습니다.
비밀번호는 한 번만 입력하고 싶습니다(그래서 실행할 때마다 컬이 비밀번호를 묻는 것을 원하지 않습니다). 프로세스 목록이나 파일 설명자 등에 비밀번호가 표시되는 것을 원하지 않습니다.
#!/bin/bash
read -p "Enter pw:" -s pw
provide_pw() {
cat << END
"$pw"
END
}
for i in {1..10}; do
curl -u $(logname):$(provide_pw) "$url"
done
이 방법은 안전한가요? 이렇게 하면 다른 사용자가 내 비밀번호를 알 수 있나요?
답변1
$(provide_pw)
read, cat 및 heredocs와 관련된 모든 작업의 경우 최종 명령 대체는 실제 비밀번호로 대체 됩니다 . 그런 다음 프로세스 세부정보의 일부가 됩니다.
~에서man curl
, 에 대한 -u
:
작동하는 시스템에서 컬은 프로세스 목록에서 주어진 옵션 인수를 숨깁니다.
따라서 이러한 시스템과 적절하게 설정된 Linux 시스템에서는 비밀번호가 다른 사용자에게 숨겨지지만 다른 곳에서는 , 등을 사용하여 hidepid
컬 프로세스의 명령줄을 보면 누구나 비밀번호를 볼 수 있습니다.ps
top
read
비밀번호를 원하시면 curl
다음을 수행해 주세요.
사용자 이름만 지정하면 컬이 비밀번호를 묻는 메시지를 표시합니다.
또한보십시오:컬은 비밀번호가 ps 출력에 나타나지 않도록 어떻게 보호합니까?여기에는 경쟁 조건이 있습니다. 컬을 시작하고 명령줄을 정리하는 사이에 비밀번호가 표시되며, 다른 방법(예: Linux)으로 숨기지 않으면 hidepid
해당 창에 있는 모든 사람에게 표시됩니다.
답변2
명령줄 인수에 암호를 입력하는 것은 curl
매우 일반적입니다 . 비밀번호를 사용하는 가장 안전한 방법은 아닐 수 있지만 완벽한 것은 없으며 대부분의 경우 선택의 여지가 많지 않습니다.
그러나 비밀번호를 얻는 능력은 전혀 필요하지 않습니다. 간단히 이렇게 할 수 있습니다:
read -rsp "Enter pw: " pw
curl -u "$(logname)":"$pw" "$url"
참고: 백슬래시 이스케이프 문자를 문자 그대로 읽을 수 있도록 명령 -r
에 매개변수를 추가했습니다 . 이는 확실히 비밀번호로 수행할 수 있는 작업입니다.read