web-dev-qa-db-fra.com

Comment exporter une variable d'environnement multiligne dans Bash/Terminal, par exemple: clé privée RSA

Une de nos applications github-backup requiert l'utilisation d'une clé privée RSA en tant que variable d'environnement.

Essayez simplement d’exporter la clé dans le terminal, par exemple: text export PRIVATE_KEY=-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA04up8hoqzS1+ ... l48DlnUtMdMrWvBlRFPzU+hU9wDhb3F0CATQdvYo2mhzyUs8B1ZSQz2Vy== -----END RSA PRIVATE KEY-----

Ne fonctionne pas ... à cause des sauts de ligne.

J'ai fait un peu de recherche sur Google mais je n'ai pas trouvé de solution viable ...
Par exemple: Comment définir une variable d'environnement de clé privée RSA multiligne pour AWS Elastic Beans

image

Erreur: -----END RSA PRIVATE KEY-----': not a valid identifier

suivi les instructions dans: http://blog.vawter.com/2016/02/10/Create-an-Environment-Variable-from-a-Private-Key

Création d'un fichier appelé keytoenvar.sh avec les lignes suivantes:

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

image puis exécuté la commande suivante:

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

Cela fonctionne mais cela ressemble à une approche "à longue haleine _" ... ????

Est-ce que quelqu'un connaît une plus simple manière de faire cela?
(J'espère une solution " conviviale pour les débutants " sans trop de "étapes" ...)

12
nelsonic

exporter la clé

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

test.sh

#!/bin/bash

echo $PRIVATE_KEY;

Si vous souhaitez enregistrer la clé dans un fichier .env avec le reste de vos variables d'environnement, il vous suffit "d'emballer" la chaîne de clé privée entre single quotes dans le fichier .env ... par exemple: sh exports HELLO_WORLD='-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA04up8hoqzS1+APIB0RhjXyObwHQnOzhAk5Bd7mhkSbPkyhP1 ... iWlX9HNavcydATJc1f0DpzF0u4zY8PY24RVoW8vk+bJANPp1o2IAkeajCaF3w9nf q/SyqAWVmvwYuIhDiHDaV2A== -----END RSA PRIVATE KEY-----'Alors la commande suivante fonctionnera:

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

Suivi par:

source .env

Maintenant, la clé sera dans votre fichier .env et chaque fois que vous aurez source .env, elle sera exportée.

13
Tushar Gupta

Si vous souhaitez exporter une valeur directe (pas de * .pem), utilisez " après le signe égal. Le terminal vous permettra de terminer avec un autre ".

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

NOTE: Pour que la sortie fonctionne correctement, je devais envelopper la variable d'environnement entre guillemets. Sinon, il a remplacé les nouvelles lignes par des espaces.

Dans:

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

En dehors:

echo "$PRIVATE_KEY"
1
Brett Beatty

Ce que je voulais, c’est un et un seul script Shell exécutable contenant tout le texte, et non pas un script et un fichier .pem, puis une gymnastique intermédiaire, comme ce que j’observe dans les réponses existantes. 

Pour réaliser cette unification, il ne manque que ce qui suit. Phase de préparation:

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

Le reste est une promenade dans le parc. Pour ssh en utilisant la variable pk, vous allez reconvertir la chaîne 1-liner dans sa posture d'origine et écrire dans un fichier temporaire. 

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

Pour nettoyer, utilisez la trap:

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

Pour améliorer la sécurité, modifiez mktemp afin d'écrire quelque part dans votre dossier $HOME où vous êtes le seul à pouvoir lire, plutôt que dans /tmp où d'autres utilisateurs du même serveur peuvent lire. 

0
typelogic