我正在尝试编写一个包装器脚本来启动 ncat 侦听器。我不想将证书和密钥输出到文件中,而是想将其存储为脚本中的变量,并像这样调用它:
#!/bin/bash
crt="( ---BEGIN CERT ----
MIICjdkfj4544757jkdfjdkfjsfsdkljf4alwjkqe3r3lkfd
dfjsdkfjdkfjdkfjdf34534235jeklgjeg94gjriogjgojdgkdo7HH
87HSKRNSSFSDFJDKDJFKJDSF/7387dfddffdfd8jhrg8hgs....etc")
ncat --listen --ssl --ssl-cert "$crt" --ssl-key "$key" 127.0.0.1 4444
但是 ncat(或 bash)一直将密钥解释为超长文件名,而不是密钥本身。基本上,我想将密钥和证书存储为变量,并让 ncat 读取它们,就像从实际文件中读取一样。这可能吗?我尝试了几种不同的方法,但还没有成功。
答案1
尝试:
ncat --listen --ssl --ssl-cert <(echo -n "$crt") --ssl-key <(echo -n "$key") 127.0.0.1 4444
存在-n
,因此echo
不会添加换行符。<( ... )
在 Bash 中称为进程替换,它本质上是根据命令创建一个虚拟文件。它允许您使用几乎任何可以生成字节流的东西以及大多数从文件路径读取字节流的程序。
有些程序无法使用这种方法,因为它们试图执行流不支持的操作,例如查找。但大多数程序只会将文件读入内部缓冲区,对于这些程序,进程替换将允许您执行所需的操作。
答案2
ncat 的手册页显示
--ssl-cert Specify SSL certificate file (PEM) for listening
您正在使用 --ssl-cert 指定文件路径。您可以将证书字符串写入文件,然后将该文件用作 -ssl-cert 的参数。
crt="--BEGIN CERT-- ..."
echo $crt > cirt.tmp
ncat --ssl-cert cirt.tmp ...
抱歉,我刚注意到您说不想使用某个文件。如果有帮助的话,您可以在写入文件后删除它。