2010-12-10 6 views
10

私はコマンドラインユーティリティ(propietaryので変更できない)を使用してPythonアプリケーションを作成しています。問題は、パスワードをコマンドライン引数としてツールに渡さなければならないということです。このパスワードは、 'ps ax'を実行するすべてのユーザーが簡単に見ることができます。 Python(またはシェルスクリプト)からパスワードをコマンドラインツールに安全に送信するにはどうすればよいですか?コマンドラインツールにパスワードを送る

+0

これは、呼び出すツールがパスワードを受け入れる方法に強く依存します。例えば、 'ssh'は端末であればstdinからそれを受け取ります。 – khachik

+0

'sudo'はどんな使い方ですか? –

答えて

2

パスワードがコマンドラインでのみ受け付けられた場合、あなたはほとんど幸運ではありません。別の方法でパスワードを送信するオプションがないことは絶対に確かですか?プロセスのstdinを介して送信することができれば、それをパイプ経由で話し、その方法で安全にパスワードを送信することができます。

+0

私はそれを調べますが、可能かどうかは分かりません。 – theprole

+0

パイプ経由でパスワードをプログラムに渡すのは安全ですか?私の新しい質問を参照してくださいhttp://stackoverflow.com/questions/6321353/securely-passing-password-to-openssl-via-stdin多分あなたはそこにいくつかのポイントをつかむことができます。 – Enchilada

5

アプリケーションに対話モードがある場合は、pyexpectのようなものを使用できます。

コマンドラインでパスワードを受け入れるだけの場合、アプリケーションは 'ps ax'に脆弱であるように設計されていましたが、元の悪い設計をどのように克服すると思われますか?それは専制主義であり、告発は有罪判決に向かうべきです。^ H^H^H^H^Hauthor。

0

暗号化されたパスワード引数を使用し、暗号化されたパスワードを渡すことで、セキュリティを強化することができます。プログラムは暗号化を解除できます。少なくとも平文のパスワードは周囲に浮かぶことはありません。別のプロセスを介してプロセスを起動し、引数を渡すときにこのメソッドを使いました。あなたのケースでは実現可能ではないかもしれません。

0

getpass.getpass()を使用してコマンドプロンプトからパスワードを受け入れる別のpythonスクリプトを書き、それを変数に格納します。次にパスワードを持つ変数をパラメータとしてスクリプトからコマンドを呼び出します。

somecommand --password=$(echo "Enter Password: " >&2;read -s PASSWORD;echo $PASSWORD) 

次のよう

0

あなたは、パスワードの入力は、それが

パスワードがシェル履歴

には表示されません実行する前にコマンドを投入します。しかし、それはWILLインラインシェルラッパーを強制することができますあなたの 'ps'出力に表示されます

0

これはbashでどうですか:

command_asking_for_password < <(command_that_prints_a_password; echo -n "\r") 
+0

'printf'を使う方が良い - バックスラッシュを使って書式文字列を与えられたときの' echo'の振る舞い、つまり '-n'引き数はPOSIXで定義されていません(http:// pubs .opengroup.org/onlinepubs/9699919799/utilities/echo.html)、実際のシェルでは(灰とダッシュの動作は、デフォルトの設定のbashとは異なります。これは 'xpg_echo'フラグが有効なbashとは異なります)。 –

関連する問題