web-dev-qa-db-ja.com

Bash / Terminalで複数行の環境変数をエクスポートする方法(例:RSA秘密鍵)

アプリの1つ github-backup では、環境変数としてRSA秘密鍵を使用する必要があります。

端末でキーをエクスポートしようとするだけです。例:text export PRIVATE_KEY=-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA04up8hoqzS1+ ... l48DlnUtMdMrWvBlRFPzU+hU9wDhb3F0CATQdvYo2mhzyUs8B1ZSQz2Vy== -----END RSA PRIVATE KEY-----

動作しない...改行のため。

私は少しグーグルをしましたが、実行可能な解決策が見つかりませんでした...
e.g: AWS Elastic Beansの複数行RSA秘密鍵環境変数の設定方法

image

エラー:-----END RSA PRIVATE KEY-----': not a valid identifier

http://blog.vawter.com/2016/02/10/Create-an-Environment-Variable-from-a-Private-Key の指示に従いました。

次の行を含むkeytoenvar.shというファイルを作成しました。

#!/usr/bin/env bash
file=$2
name=$1
export $name="$(awk 'BEGIN{}{out=out$0"\n"}END{print out}' $file| sed 's/\n$//')"

image その後、次のコマンドを実行しました。

source keytoenvar.sh PRIVATE_KEY ./gitbu.2018-03-23.private-key.pem

そのworksが、「long-winded」アプローチのように思えます... ????

simplerこれを行う方法を知っている人はいますか?
初心者に優しい」ソリューションで、「ステップ」が多すぎないことを望んでいます...

19
nelsonic

キーをエクスポート

export PRIVATE_KEY=`cat ./gitbu.2018-03-23.private-key.pem`

test.sh

#!/bin/bash

echo $PRIVATE_KEY;

残りの環境変数を使用してキーを.envファイルに保存する場合は、秘密キー文字列を単一引用符で囲みます.envファイルで...例:sh exports HELLO_WORLD='-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA04up8hoqzS1+APIB0RhjXyObwHQnOzhAk5Bd7mhkSbPkyhP1 ... iWlX9HNavcydATJc1f0DpzF0u4zY8PY24RVoW8vk+bJANPp1o2IAkeajCaF3w9nf q/SyqAWVmvwYuIhDiHDaV2A== -----END RSA PRIVATE KEY-----'したがって、次のコマンドが機能します。

echo "export PRIVATE_KEY='`cat ./gitbu.2018-03-23.private-key.pem`'" >> .env

に続く:

source .env

これで、キーは.envファイルに含まれ、.envをソースするたびにエクスポートされます。

(* .pemからではなく)直接値をエクスポートする場合は、等号の後に"を使用します。端末は別の"で終了します。

export PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA04up8hoqzS1+
...
l48DlnUtMdMrWvBlRFPzU+hU9wDhb3F0CATQdvYo2mhzyUs8B1ZSQz2Vy==
-----END RSA PRIVATE KEY-----"
8
Amio.io

NOTE:出力を正しく動作させるには、環境変数を二重引用符で囲む必要がありました。それ以外の場合は、改行をスペースに置き換えました。

に:

export PRIVATE_KEY=$(cat ./gitbu.2018-03-23.private-key.pem)

でる:

echo "$PRIVATE_KEY"
4
Brett Beatty

私が欲しかったのは、1つのスクリプトと1つの.pemファイルではなく、すべてを含む唯一の実行可能なShellスクリプトであり、その間にいくつかの体操を行います。

この統一を達成するために必要なのは、次のものだけです。準備段階:

cat id_rsa | base64 -w0
# assign the converted 1-liner string wrap in single quote into a Shell variable, for example
pk='xxxxxxxxxxxyyyyyyyyyyzzzzzzzzzzz......'

残りはウォークインザパークです。変数pkを使用してsshするには、1ライナーの文字列を元の姿勢に変換し、一時ファイルに書き込みます。

t=$(mktemp)
printf $pk | base64 --decode > $t
ssh -i $t [email protected]

クリーンアップするには、trapを使用します。

trap cleanup 1 2 3 6
cleanup () {
    rm -f $t
}

セキュリティを向上させるには、mktempを変更して、同じサーバーの他のユーザーが読み取ることができる$HOMEではなく、/tmpフォルダー内の読み取り専用の場所に書き込むようにします。

4
typelogic

Bash heredocを使用することもできます。

export MY_CERTIFICATE=$(cat <<EOF
-----BEGIN CERTIFICATE-----
qiuwiuwoejqododhIOOISOIIOiiSNIDNIDINDIONDIND
DDHDHUDHDUHUhudhHQhhqoohooiiohihiohihhihhihi
dhdiodhioho...
-----END CERTIFICATE-----
EOF
)

設定したら、通常のenv変数echo $MY_CERTIFICATEとしてアクセスできます。

2
vas