如何屏蔽“watch”命令中的密码?

如何屏蔽“watch”命令中的密码?

我正在使用watch它来监控 MySQL 复制从站的进度。按照我现在设置的方式,密码显示在watch输出的标题中。我不太担心有人会窃取密码,但原则上我不想向任何偶然走过来偷看我肩膀的人展示赤裸裸的密码。

我当前使用的命令行watch是:

watch -n1 -d mysql -pmypass -e "'show slave status\G'"

我应该将mysql命令隐藏在一个很小的 ​​shell 脚本中吗?

答案1

比在命令行上提供密码更好的选择是创建一个~/.my.cnf包含凭据的文件:

[client]
password=something

这样,它们也可以防止有人查看输出ps或您的 shell 历史记录。

也就是说,您可以watch使用以下命令完全关闭标题-t--no-title选项,这将:

关闭显示屏顶部显示间隔、命令和当前时间的标题以及后面的空行。

您确实丢失了比您想要的更多的信息,但这并不是非常重要。否则,正如您所建议的,shell 脚本也可以工作。

答案2

它不仅会显示在您的屏幕上,还会显示在ps输出中、您的~/.bash_history(尽管该输出应该只有您和管理员可读)中,并且可能会出现在某些审核或性能日志中。

您不应将密码作为参数传递给命令。命令的参数应被视为公共知识。

对于 mysql,使用~/.my.cnfas迈克尔已经表明或在另一个文件中(只能自己读取)传递为--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

相关内容