次の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プロセスに渡します。次の場合に動作します。
パスワードだけ尋ねるが、
つまり。他のプロンプトはありません(ほとんどのコマンドは予測可能です)。
対話型でなくてもSTDINのパスワードを受け入れます。
つまり。プログラムは、意図的に入力ファイルが対話型端末であることを確認して中断できます。