我想创建一个脚本来运行以下 BASH 命令:
mysqldump -u [username] -p [db_name] > [path to backup file]
这会产生一个备份文件。在 BASH 中运行此程序时,它会在继续之前提示输入密码。
如何在 BASH 脚本中制作此脚本以便自动输入密码?
这可以安全地完成吗?
答案1
这里最好的方法是执行以下操作:
mysqldump --defaults-extra-file=/path/to/auth.cnf ...
看起来auth.cnf
像:
[client]
user=the-user
password=the-password
然后确保该文件只能由运行该脚本的人读取。脚本本身是世界可读的。
答案2
在任何文件中保留纯文本密码总是一个坏主意,以防您的系统受到损害。有时这是不可避免的。为了使此操作“安全”,您应该将此活动限制为非常有限的用户,并将这些敏感选项保留在默认文件中。
要具体解决您的问题,请从mysql
手册页:
If you use the short option form (-p), you cannot have a space
between the option and the password. If you omit the password
value following the --password or -p option on the command line,
mysql prompts for one.
为了解决这个问题,你需要运行:
mysqldump -u [username] -p[password] [db_name] > [path to backup file]
或者
mysqldump -u [username] -password=[password] [db_name] > [path to backup file]
答案3
如果选项与我记得的相同,您应该能够执行以下操作:
mysqldump -opt [db_name] -u [用户名] -p[密码] > [备份文件路径]
不要在 -p 和实际密码之间添加空格。
答案4
Stephane 的答案是针对 mysql 案例的最佳方法。并且在大多数情况下使用程序“自己”的方式是最好的。
但是,要回答您问题的 Bash 部分:
mysqldump -u joe -p <<<"joe's pasword" > /path/to/backup/file
或(不太不安全)
mysqldump -u joe -p </path/to/file/with/joes/password > /path/to/backup/file
这种方法将简单地将字符串传递给 mysqldump 进程。它将起作用,前提是:
它只要求输入密码,
IE。没有其他提示(大多数命令都是可以预测的);
即使它不是交互式的,它也会接受来自 STDIN 的密码,
IE。程序可以故意验证输入的文件是否是交互式终端并中止。