web-dev-qa-db-ja.com

特殊文字を使用したSSHリモート実行コマンド

特殊文字を含む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を介して特殊文字を使用してコマンドを実行するにはどうすればよいですか?

3
Luke

Sshに渡すコマンドの特殊文字をエスケープしてみることができます。その場合あなたの

p $ ssw0rd

になります

p\$ ssw0rd

使用しているシェルは「\」文字の解釈が異なる可能性があるため、100%の解決策を保証することはできませんが、試してみても問題はありません。

4
MelBurslan

オプションファイルで資格情報を指定してみませんか?

~/.my.cnfを編集して、次のようなものを追加します。

[mysql]
user = 'dbname'
password = 'p$ssw0rd'

必ず$ chmod 600 ~/.my.cnfを実行して、そのファイルへのアクセスを制限してください。

その場合、SSHコマンドでそれらを指定する必要はありません。ユーザー名/パスワードは実行中のプロセスリスト(すべてのユーザーが表示可能)の~/.bash_historyまたはにも表示されないため、これは間違いなく安全な方法です。

2
EEAA