我正在使用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.cnf
as迈克尔已经表明或在另一个文件中(只能自己读取)传递为--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