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


45

これを実行した場合:

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

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


5
タイトルがかなり不明瞭だとは思わないでください。パスワードを含むすべてのテキストが見えるようになると言うことができます。そして、sshはあなたが入力しているものがパスワードであるか他のコマンドまたはデータであるかを知ることをどのように意味しますか?
-barlop

@barlop私は提案を受け入れています。
user110971

@barlopは、サーバーにsshしてコマンドを実行したときに機能します。コマンドが引数として提供されたときにsshの動作を同じにする方法を探しています。
user110971

おそらくそれほど必要ではありませんが、コンソールから完全なコピー/貼り付けの例を含めることができます。たとえば、sshコマンドだけでなく、応答や、それに続くmysqlプロンプトも表示できます。パスワードをswisscheeseに変更して、サイトに配置しないようにすることができます。現時点ではテストできません
-barlop

@barlopそれはあなたが期待するのと同じメッセージです。つまり、sshパスワードとMySQLパスワードプロンプトが続きます
user110971

回答:


100

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

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

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


15
または、〜/ .ssh / configを編集して、特定のホストが常にTTYを要求するように構成できます。を参照RequestTTYしてくださいman 5 ssh_config
CVn

7
@MichaelKjörling(およびToby):副作用があるため、「-t」の追加はインタラクティブな使用のみに予約する必要があるという警告を少し追加するかもしれません。これらの副作用のいくつかについての良い見解については、unix.stackexchange.com / a / 122624/27616(StephaneChazelasから)
オリビエデュラック

合意-リモートコマンド(ホストではなく)に応じて(このような)設定を追加できないのは残念だと提案するつもりでした。
トビーSpeight

28

保護されたオプションファイルにパスワードを保存する

あなたが信頼できる場合は、[*]リモートコンピュータのセキュリティをで提案されているように、あなたは、適切に保護されたオプションファイルにパスワードを保存することができますパスワードのセキュリティのためのエンドユーザーガイドラインマニュアルの章を介して通信することなく、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の割り当てを強制することができます(必要に応じて2つ以上):

-t

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

についてのこのDebian投稿(Jul_11_2008)で読むことができるようにsudo、それは繰り返しを好む古い問題です:

ssh user@server "sudo ls"  
password: password  

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

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

ssh -t user@server sudo ls

注意:

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


1
副作用があるため、「-t」を追加することはインタラクティブな使用にのみ予約する必要があるという警告を少し追加します。これらの副作用のいくつかについての良い見方について:unix.stackexchange.com/a/122624/27616(StephaneChazelasから)
オリビエデュラック

3

proc fsのマウントオプション「hidepid」も有益です。他のユーザーのプロセスリストでコマンドラインを非表示にします。fstabの例:

proc /proc proc hidepid=1 0 0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.