nel*_*nic 21 environment-variables multiline private-key
我们的其中一个应用程序github-backup要求使用RSA私钥作为环境变量.
只需尝试将密钥导出到终端中,例如:
text
export PRIVATE_KEY=-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA04up8hoqzS1+
...
l48DlnUtMdMrWvBlRFPzU+hU9wDhb3F0CATQdvYo2mhzyUs8B1ZSQz2Vy==
-----END RSA PRIVATE KEY-----
不起作用......因为换行符.
我做了一些谷歌搜索,但没有找到一个可行的解决方案...
例如:如何为AWS弹性豆设置多线RSA私钥环境变量

错误:
-----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$//')"
Run Code Online (Sandbox Code Playgroud)
然后运行以下命令:
source keytoenvar.sh PRIVATE_KEY ./gitbu.2018-03-23.private-key.pem
Run Code Online (Sandbox Code Playgroud)
这有效但似乎是一种" 啰嗦 "的方法......
有谁知道更简单的方法吗?
(我希望有一个" 初学者友好 "的解决方案,没有太多的"步骤"......)
Tus*_*har 24
出口钥匙
export PRIVATE_KEY=`cat ./gitbu.2018-03-23.private-key.pem`
Run Code Online (Sandbox Code Playgroud)
test.sh
#!/bin/bash
echo $PRIVATE_KEY;
Run Code Online (Sandbox Code Playgroud)
如果要将密钥保存到.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
Run Code Online (Sandbox Code Playgroud)
其次是:
source .env
Run Code Online (Sandbox Code Playgroud)
现在,密钥将在您的.env文件中,并且每当您提供.env时,它都将被导出.
big*_*pan 15
您还可以使用 bash heredoc:
export MY_CERTIFICATE=$(cat <<EOF
-----BEGIN CERTIFICATE-----
qiuwiuwoejqododhIOOISOIIOiiSNIDNIDINDIONDIND
DDHDHUDHDUHUhudhHQhhqoohooiiohihiohihhihhihi
dhdiodhioho...
-----END CERTIFICATE-----
EOF
)
Run Code Online (Sandbox Code Playgroud)
设置后,您可以将其作为常规环境变量访问echo "$MY_CERTIFICATE"。
如果要导出直接值(不是从* .pem导出),请"在等号后使用。终端将让您完成另一个"。
export PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA04up8hoqzS1+
...
l48DlnUtMdMrWvBlRFPzU+hU9wDhb3F0CATQdvYo2mhzyUs8B1ZSQz2Vy==
-----END RSA PRIVATE KEY-----"
Run Code Online (Sandbox Code Playgroud)
小智 8
我要补充的是,一种更优雅、万无一失的方法是将环境变量编码为 base64,然后在访问它时对其进行解码。
const base64 = process.env.GITHUB_PRIVATE_KEY
const privateKey = Buffer.from(base64, 'base64')
Run Code Online (Sandbox Code Playgroud)
我想要的是一个并且只有一个包含所有内容的可执行shell脚本,而不是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......'
Run Code Online (Sandbox Code Playgroud)
其余的都是在公园散步。要使用变量ssh,pk您需要将1-liner字符串转换回其原始状态并写入临时文件。
t=$(mktemp)
printf $pk | base64 --decode > $t
ssh -i $t smeagol@192.143.69.69
Run Code Online (Sandbox Code Playgroud)
要清理,请使用trap:
trap cleanup 1 2 3 6
cleanup () {
rm -f $t
}
Run Code Online (Sandbox Code Playgroud)
为了提高安全性,请进行修改,mktemp以便将其写在$HOME文件夹中只能读取的位置,而不要写入/tmp同一服务器中其他用户可以读取的位置。
注意:为了使输出正常工作,我必须将环境变量用双引号引起来。否则,它将换行符替换为空格。
在:
export PRIVATE_KEY=$(cat ./gitbu.2018-03-23.private-key.pem)
Run Code Online (Sandbox Code Playgroud)
出:
echo "$PRIVATE_KEY"
Run Code Online (Sandbox Code Playgroud)
将 RSA 密钥添加到.env文件中。
第1步。
echo "PRIVATE_KEY=\"`sed -E 's/$/\\\n/g' my_rsa_2048_priv.pem`\"" >> .env
Run Code Online (Sandbox Code Playgroud)
您在.env文件中的密钥将如下所示:
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\n
dasdasdadasdasdasdasdasdasdasdadasdasdadasa\n
huehuauhhuauhahuauhauahuauhehuehuauheuhahue\n
-----END RSA PRIVATE KEY-----\n"
Run Code Online (Sandbox Code Playgroud)
步骤 2. 打印PRIVATE_KEY只显示第一行。将变量更改为一行。像这样:
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\ndasdasdadasdasdasdasdasdasdasdadasdasdadasa\nhuehuauhhuauhahuauhauahuauhehuehuauheuhahue\n-----END RSA PRIVATE KEY-----\n"
Run Code Online (Sandbox Code Playgroud)
如果在应用程序中使用密钥,例如节点。
process.env.PRIVATE_KEY将正确输出。
| 归档时间: |
|
| 查看次数: |
19793 次 |
| 最近记录: |