Как экспортировать переменную многострочной среды в Bash/Terminal, например: RSA Private Key

В одном из наших приложений github-backup требуется использование RSA Private Key в качестве переменной среды.

Просто попытайтесь экспортировать ключ в терминал, например: text export PRIVATE_KEY=-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA04up8hoqzS1+... l48DlnUtMdMrWvBlRFPzU+hU9wDhb3F0CATQdvYo2mhzyUs8B1ZSQz2Vy== -----END RSA PRIVATE KEY-----

Не работает... из-за разрыва строки.

Я немного поработал с поиском, но не нашел подходящего решения...
например: Как установить многострочную переменную среды частного ключа RSA для AWS Elastic Beans

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

Это работает, но это похоже на "длинный" подход... 🤔

Кто-нибудь знает более простой способ сделать это?
(Я надеюсь на " удобное для начинающих " решение без слишком много "шагов"...)

Ответы

Ответ 1

экспортировать ключ

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, он будет экспортироваться.

Ответ 2

Если вы хотите экспортировать прямое значение (не из *.pem), используйте " после знака равенства. Терминал позволит вам закончить с другим ".

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

Ответ 3

ПРИМЕЧАНИЕ. Для правильной работы вывода мне пришлось заключить переменную среды в двойные кавычки. В противном случае он заменял символы новой строки пробелами.

В:

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

Из:

echo "$PRIVATE_KEY"

Ответ 4

То, что я хотел, - это один и только один исполняемый скрипт оболочки, содержащий все это, а не 1 скрипт и 1 файл .pem а затем выполнять некоторую гимнастику между ними, как то, что я вижу в существующих ответах до сих пор.

Чтобы достичь этого объединения, все, что нужно, это следующее. Фаза подготовки:

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

Остальное - прогулка в парке. В ssh, используя переменную pk вы конвертируете строку из 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 где другие пользователи на том же сервере могут читать.

Ответ 5

Вы также можете использовать bash heredoc:

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

После того, как вы установите его, вы сможете получить к нему доступ как к обычной переменной env echo $MY_CERTIFICATE.