コマンド ライン経由でパスワードを渡すことは安全ではないと見なされます。他のユーザーは、ps afx
または/proc
ファイル システムを使用してパスワードをプレーン テキストで見ることができるからです。最近、このトピックに関するブログ記事を書きました。
ただし、コマンドを機能させるには、bashがスペースで区切られたパスワードを複数の引数として解釈しないように、二重引用符"
で囲む必要があります。$MYPASS
MYPASS="foo bar password"
mysql -u backupuser -p"$MYPASS" -e ...
ただしexpect
、パスワードをに渡すために使用する次のようなソリューションを強くお勧めしmysqldump
ます。
#!/bin/bash
# mysql credentials and connection data
db_host="localhost"
db_name="testdb"
db_user="jon"
db_pass="secret"
# I'm using a here-document to pass commands to expect.
# (the commands could be stored in a file as well)
expect <<EOF
# disable command output
log_user 0
# start the mysqldump process
spawn mysqldump -h$db_host -u$db_user -p $db_name
# wait for the password prompt
expect "password:"
# send the password (mind the \r)
send "$db_pass\r"
# enable output again
log_user 1
# echo all outout until the end
expect eof
EOF
expect
は、人間のユーザーが行うのと同じ方法でパスワードを渡しますmysqldump
。プロンプトが表示された後、stdin に書き込みます。他のユーザーが except スクリプトにアクセスできないようにすると、パスワードをプレーン テキストで表示するオプションがなくなります。