値をエクスポートする前に、ユーザー名とパスワードを設定するために使用するこのファイルがあります。
#!/bin/bash
echo -n "User:";
read user
echo -n "Password:";
read -s password
export http_proxy=http://$user:$password@$domain:$portnum
if curl -silent http://www.google.com | grep authentication_failed;
then
echo NO CONNECT
unset http_proxy
else
echo OK
fi
history
、printenv
、およびexport -p
設定した値を確認できます
さらに、$ password内に暗号化された形式のパスワードが必要ですが、その値にはパスワードが逐語的に含まれています。
私はopensshを使用してパスワードをソルトしたり、Perlのcrypt()を使用してハッシュを印刷したりすることに慣れていますが、私の目的では、その使用法がわかりませんか?ヒントはありますか?
history
コマンドからの出力に表示されるパスワードであなたが言及した問題を再現することができません。
printenv
およびexport -p
からの出力に表示されるパスワードは意図したとおりに機能しています。これらのコマンドは環境変数を表示し、そこにhttp_proxy
文字列を配置します。
環境変数は子プロセスによって自動的に継承されますが、他のプロセスには継承されません。同じセキュリティドメイン内のプロセスにしか表示されないため、これが大きな懸念事項であると考える理由がわかりません。
ただし、環境変数に入れるのをやめて、代わりに通常のシェル変数を使用することもできます。その場合、子プロセスには継承されません。 curlに環境変数へのアクセスを許可したい場合は、環境変数をその1つのコマンドだけに渡し、他のすべてのコマンドには渡さないようにすることができます。
#!/bin/bash
echo -n "User:";
read user
echo -n "Password:";
read -s password
proxy="http://$user:$password@$domain:$portnum"
if http_proxy="$proxy" curl -silent http://www.google.com | grep authentication_failed;
then
echo NO CONNECT
else
echo OK
fi
むしろ、現在のユーザーだけが読める安全なファイルにパスワードを保存する必要があります。
次に、そのファイルコンテンツをパイプするか、ターゲットアプリが提供するメカニズムを使用します。
imho curl
は、そのようなオプションを提供します。