特殊文字を含むSSHを介したリモートコマンドの実行に問題があります。バックアップの目的でMySQLからデータベースをエクスポートしようとしています。これは、ローカルスクリプトにあるコマンドです。
#!/bin/bash
ssh user@Host "mysqldump -u dbname -p'p$ssw0rd' --lock-tables=false dbname > ~/sites/mysite/backup/dbname.sql"
ご覧のとおり、パスワードの前後に「」文字を使用しています。このスクリプトを実行すると、次のエラーが発生します。
mysqldump: Got error: 1045: Access denied for user 'dbname'@'localhost' (using password: YES) when trying to connect
ただし、手動でマシンにSSH接続してコマンドを実行すると、正常に実行されます。 sshでコマンドを実行すると、何かが失われ、パスワードが届かないという印象を受けます。
Sshを介して特殊文字を使用してコマンドを実行するにはどうすればよいですか?
Sshに渡すコマンドの特殊文字をエスケープしてみることができます。その場合あなたの
p $ ssw0rd
になります
p\$ ssw0rd
使用しているシェルは「\」文字の解釈が異なる可能性があるため、100%の解決策を保証することはできませんが、試してみても問題はありません。
オプションファイルで資格情報を指定してみませんか?
~/.my.cnf
を編集して、次のようなものを追加します。
[mysql]
user = 'dbname'
password = 'p$ssw0rd'
必ず$ chmod 600 ~/.my.cnf
を実行して、そのファイルへのアクセスを制限してください。
その場合、SSHコマンドでそれらを指定する必要はありません。ユーザー名/パスワードは実行中のプロセスリスト(すべてのユーザーが表示可能)の~/.bash_history
またはにも表示されないため、これは間違いなく安全な方法です。