"watch" 명령에서 비밀번호를 마스크하는 방법은 무엇입니까?

"watch" 명령에서 비밀번호를 마스크하는 방법은 무엇입니까?

저는 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

관련 정보