値をエクスポートする前にユーザー名とパスワードを設定するこのファイルがあります。
#!/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()を使ってハッシュを印刷したりするのに慣れていますが、私の目的には使用できません。どんな提案がありますか?
答え1
言及した問題を再現できません。history
コマンド出力にパスワードが表示されます。
パスワードは出力に表示され、printenv
期待export -p
どおりに機能します。このコマンドは、文字列を入力する環境変数を表示しますhttp_proxy
。
環境変数は子プロセスによって自動的に継承されますが、他のプロセスでは継承されません。同じセキュリティドメイン内のプロセスにのみ表示されるので、これがなぜ大きな問題だと思うのか理解できません。
ただし、環境変数に入れるのをやめ、代わりに通常のシェル変数を使用することができます。これは子プロセスから継承されません。おそらく、カールが環境変数にアクセスしたいので、他のすべてのコマンドではなく、そのコマンドにのみ環境変数を渡すことができます。
#!/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
答え2
機密情報を伝えて頻繁に使用する場合は、opensslを使用して暗号化する方が良いでしょう。
同じものを入れて
#create key as follows - will prompt for password
#echo -n 'secret you want encrypted' | openssl enc -aes-256-cbc -a -salt -pbkdf2|base64
export MY_SECRET='VTJGc2RHVmtYMTlzVnBGWXNYUitLWlpYT3BWdStaQXJXeUVwc1JORnFsNWswZXJKT1dkRWpsWkxLWVFnK1hONQo='
.bashrcに入ると、パスワードが必要などこからでもアクセスできる暗号化された環境変数が提供され、環境変数を作成するときに使用したパスワードの入力を求められます。
上記の例では「秘密」です。
アクセスするコマンドは次のとおりです。
`echo $MY_SECRET|base64 --decode|openssl enc -aes-256-cbc -a -d -salt -pbkdf2 `
例えば
xfreerpd /parameters.... /p:`echo $MY_SECRET|base64 --decode|openssl enc -aes-256-cbc -a -d -salt -pbkdf2`
クエリの場合は、環境変数を作成し、環境変数にパスワードを作成します。
次のように変数を作成できます。
password_encrypted=`echo -n 'secret you want encrypted' | openssl enc -aes-256-cbc -a -salt -pbkdf2|base64`
次に、次のように使用します。
export http_proxy=http://$user:`echo $password_encrypted|base64 --decode|openssl enc -aes-256-cbc -a -d -salt -pbkdf2 `@$domain:$portnum
base64部分は変数を設定できるようにするためのものです。
MY_SECRET='VTJGc2RHVmtYMTlzVnBGWXNYUitLWlpYT3BWdStaQXJXeUVwc1JORnFsNWswZXJKT1dkRWpsWkxLWVFnK1hONQo='
そして、コマンド履歴などに秘密を閉じ込めないでください。
シークレットを生成するときにBase64出力に複数の行が含まれることがあるため、変数をラップする必要があります。
echo -n 'secret you want encrypted' | openssl enc -aes-256-cbc -a -salt -pbkdf2|base64
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
VTJGc2RHVmtYMTlzVnBGWXNYUitLWlpYT3BWdStaQXJXeUVwc1JORnFsNWswZXJKT1dkRWpsWkxL
WVFnK1hONQo=
#take the above line break out
MY_SECRET='VTJGc2RHVmtYMTlzVnBGWXNYUitLWlpYT3BWdStaQXJXeUVwc1JORnFsNWswZXJKT1dkRWpsWkxLWVFnK1hONQo='
opensshは、暗号化して復号化するたびにパスワードの入力を求めます。コマンドの一部としてパスワードを提供できますが、記録などから何かを隠すだけです。見てhttps://www.tecmint.com/generate-encrypt-decrypt-random-passwords-in-linux/これを行うためにopensshを使用する方法に関するいくつかの情報。https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-base64-encode-and-decode-from-command-line/Base64とhttps://stackoverflow.com/questions/16072351/how-to-割り当て-an-output-to-a-shellscript-variableさまざまなコマンド置換オプションの場合は、上記で逆引用符 `を使用しました。
PS次の機能を追加
get-key()
{
echo -n "$1"|base64 --decode|openssl enc -aes-256-cbc -a -d -salt -pbkdf2
}
bashrcを使用すると、必要に応じて秘密にすばやくアクセスできます。
答え3
現在のユーザーだけが読み取ることができるセキュリティファイルにpaaswordを保存する必要があります。
次に、ファイルの内容がパイプでリンクされるか、ターゲットアプリケーションによって提供されるメカニズムを使用します。
IMHOは、独自にcurl
これらのオプションを提供します。