
저는 watch
이것을 MySQL 복제 슬레이브의 진행 상황을 모니터링하는 데 사용하고 있습니다. 지금 설정한 대로 비밀번호가 watch
출력 헤더에 표시됩니다. 누군가가 내 비밀번호를 훔쳐갈까봐 크게 걱정하지는 않지만, 원칙적으로 내 어깨 너머로 다가와 엿보는 사람에게 내 비밀번호를 알려주고 싶지 않습니다.
현재 사용하고 있는 명령줄은 watch
다음과 같습니다.
watch -n1 -d mysql -pmypass -e "'show slave status\G'"
mysql
작은 쉘 스크립트에서 명령을 숨겨야 합니까 ?
답변1
명령줄에서 비밀번호를 제공하는 것보다 더 나은 옵션은 ~/.my.cnf
자격 증명이 포함된 파일을 만드는 것입니다.
[client]
password=something
이렇게 하면 누구도 출력 ps
이나 쉘 기록을 볼 수 없게 됩니다.
즉, 다음을 watch
사용하여 헤더를 완전히 끌 수 있습니다.-t
또는 --no-title
옵션,이렇게 됩니다:
간격, 명령 및 현재 시간에 대한 제목과 그 뒤에 빈 줄이 표시되는 디스플레이 상단을 닫습니다.
원하는 것보다 더 많은 정보를 잃게 되지만 이는 그다지 중요하지 않습니다. 그렇지 않으면 제안한 대로 쉘 스크립트도 작동합니다.
답변2
화면에만 나타나는 것이 아니라 ps
출력, ~/.bash_history
(출력은 사용자와 관리자만 읽을 수 있어야 함), 일부 감사 또는 성능 로그에도 나타납니다.
명령에 대한 인수로 암호를 전달하면 안 됩니다. 명령의 매개변수는 공개된 지식으로 간주되어야 합니다.
mysql의 경우 ~/.my.cnf
다음과 같이 사용하십시오.마이클이 보여줬어또는 다른 파일(자체적으로만 읽을 수 있음)에서 다음과 같이 전달합니다.--defaults-extra-file=the-file
답변3
런타임에 비밀번호를 입력할 수 있나요? 터미널에 표시하거나 기록에 저장하지 않고도 bash 스크립트에서 읽을 수 있습니다.
#!/bin/bash
if ! IFS= read -rs -p "Enter password: " password < /dev/tty 2> /dev/tty
then
echo "Password entry failed"
exit 1
fi
somecommand -user me -password $password
다른 답변을 읽었습니다.예ps
하지만 이 문제는 프로세스가 있기 때문에 영향을 받기 쉽습니다.somecommand