web-dev-qa-db-ja.com

SSHは、SSHコマンドの引数としてコマンドが提供されると、入力されたすべてのパスワードを表示します。

これを実行すると:

ssh user@server 'mysql -u user -p'

MySQLのパスワードを要求され、入力を開始すると、パスワードが画面に表示されます。どうすればこれを防ぐことができますか? sshからログインしてMySQLコマンドを実行すると、すべてが正常に動作します。

46
user110971

実行するリモートコマンドを指定した場合、SSHはttyを割り当てないため、リモートコマンドはエコーを無効にできません。 -tオプションを使用して、SSHに強制的にttyを提供させることができます。

ssh -t user@server 'mysql -u user -p'

同等のオプション(-oまたは構成ファイルの場合)はRequestTTYです。 非対話型コマンドに望ましくない影響を与える可能性がある であるため、configでの使用には注意が必要です。

101
Toby Speight

保護されたオプションファイルへのパスワードの保存

信頼できるなら [*] リモートコンピュータのセキュリティでは、適切に保護されたオプションファイルにパスワードを保存できます。これは、「 パスワードセキュリティのエンドユーザーガイドライン 」の章で推奨されています。手動で、sshを介して通信したり、毎回入力したりする必要はありません。

具体的には、ホームディレクトリの.my.cnfファイルの[client]セクションに行を追加できます。

[client]
password=your_pass

もちろん、ファイルアクセスモードを400または600に設定して、自分以外の誰もがそのファイルにアクセスできないようにする必要があります。

chmod 600 ~/.my.cnf

次に、次のようなものを使用できます

ssh user@server 'mysql -u user110971 --defaults-file=/home/user110971/mysql-opts'

ここで、user110971はアカウントのユーザー名です。


Sshに疑似ttyを割り当てることを強制する(ssh -t

この問題は、sshを介してコマンドを送信するたびに発生し、デフォルトではsshは疑似ttyを割り当てないため、入力を挿入する必要があります。

オプション-tを使用してtty割り当てを強制できます(必要な場合は複数でもかまいません)。

-t

Force pseudo-tty allocation。これは、リモートマシンで任意の画面ベースのプログラムを実行するために使用できます。メニューサービスを実装するとき。 sshにローカルttyがない場合でも、複数の-tオプションはttyの割り当てを強制します。

あなたが このDebian投稿(Jul_11_2008) について読むことができるように、Sudoについて、それは再発を好む古い問題です:

ssh user@server "Sudo ls"  
password: password  

そしてパスワードが表示されます

解決策は、-tフラグを使用して、sshに疑似ttyを強制的に割り当てることです。

ssh -t user@server Sudo ls

注意:

[*]workingクライアントで、自分とrootだけがアクセスできるファイルにパスワードを残すことができる場合。
OSを変更するリモートコンピューターを再起動したり、HDDを削除したりできる場合、コンピューターは完全に安全であるとは言えません...しかし、その場合、データベース自体は安全ではありません。

28
Hastur

Proc fsのマウントオプション「hidepid」も重要です。コマンドラインが他のユーザーのプロセスリストに表示されなくなります。 fstabの例:

proc /proc proc hidepid=1 0 0
3
bandie