如何向 BASH 脚本添加密码

如何向 BASH 脚本添加密码

我想创建一个脚本来运行以下 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。程序可以故意验证输入的文件是否是交互式终端并中止。

相关内容