我们的一个应用程序github-backup
需要使用RSA私钥作为环境变量。
简单地尝试在终端中导出密钥,例如:text export PRIVATE_KEY=-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA04up8hoqzS1+ ... l48DlnUtMdMrWvBlRFPzU+hU9wDhb3F0CATQdvYo2mhzyUs8B1ZSQz2Vy== -----END RSA PRIVATE KEY-----
个
不起作用...因为断线了
我做了一点谷歌搜索,但没有找到一个可行的解决方案...
例如:How to set multiline RSA private key environment variable for AWS Elastic Beans
的数据
错误:-----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$//')"
字符串
然后运行以下命令:
source keytoenvar.sh PRIVATE_KEY ./gitbu.2018-03-23.private-key.pem
型
这是一种“长时间”的方法,但它似乎是一种“长时间”的方法。🤔
有没有人知道一个更简单的方法来做到这一点?
(* 我希望有一个“初学者友好”的解决方案,没有太多的“步骤”...*)
6条答案
按热度按时间5cnsuln71#
导出密钥
字符串
test.sh
型
**注意:**以上
echo
中的"
是必须的,否则新行将转换为空格!如果您想将密钥与其他环境变量一起保存到
.env
文件中,您所需要做的就是在.env
文件中用 * 单引号 *“ Package ”私钥字符串…例如:sh exports HELLO_WORLD='-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA04up8hoqzS1+APIB0RhjXyObwHQnOzhAk5Bd7mhkSbPkyhP1 ... iWlX9HNavcydATJc1f0DpzF0u4zY8PY24RVoW8vk+bJANPp1o2IAkeajCaF3w9nf q/SyqAWVmvwYuIhDiHDaV2A== -----END RSA PRIVATE KEY-----'
因此,下面的命令将工作:型
随后是:
型
现在密钥将在您的.env文件中,每当您源.env时,它将被导出。
3lxsmp7m2#
如果你想导出直接值(不是从 *.pem),那么在等号后面使用
"
。终端将让您完成另一个"
。字符串
vktxenjb3#
注意:为了让输出正确工作,我必须将环境变量用双引号括起来。否则,它会将换行符替换为空格。
于:
字符串
输出:
型
slmsl1lt4#
我想要的是一个且只有一个包含所有内容的可执行shell脚本,而不是一个脚本和一个
.pem
文件,然后在两者之间做一些体操,就像我在现有的答案中看到的那样。为了实现这种统一,所需要的只是以下几点。制备阶段:
字符串
剩下的就是在公园里散步了。要使用变量
pk
进行ssh,您需要将一行字符串转换回其原始状态并写入临时文件。型
要在shell脚本退出时清理临时文件,请添加shell
trap
处理程序:型
为了提高安全性,请注意使用了
mktemp ~/temp.XXXXXXXXXX
,因此临时文件被写入到$HOME
文件夹中只有您可以读取的位置,而不是在同一服务器中的其他用户可以读取的系统范围的/tmp
文件夹中。ykejflvf5#
将RSA密钥添加到
.env
文件。步骤1.
字符串
您在
.env
文件中的密钥看起来像这样:型
步骤2.打印
PRIVATE_KEY
只显示第一行。将变量更改为单行。就像这样:型
如果在应用程序内部使用密钥,例如节点
process.env.PRIVATE_KEY
将正确输出。mf98qq946#
我还要补充一点,一种更优雅、更简单的方法是将env var编码为base64,然后在访问它时对其进行解码。
字符串