ssh - do_convert_from_pkcs8:/dev/fd/63 不是可识别的公钥格式
问题描述
我正在尝试使用以下脚本检索我的 PIV 密钥:
getPIVkey.sh
NAME=`security find-certificate | grep PIV | sed 's;keychain:";;g' | sed 's;";;g'`
echo $NAME
ssh-keygen -i -m pkcs8 -f <(security find-certificate -p "$NAME" | openssl x509 -noout -pubkey)
在 Mac OS High Sierra 10.13.4 上。我得到:
./getPIVPub.sh
keychain: PIV-Bill K Brown (piv)
security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.
unable to load certificate
140735828857800:error:0906D06C:PEM routines:PEM_read_bio:no start line:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.50.2/libressl/crypto/pem/pem_lib.c:704:Expecting: TRUSTED CERTIFICATE
do_convert_from_pkcs8: /dev/fd/63 is not a recognised public key format
解决方案
看起来您在第一个sed
命令keychain:
和引号之间缺少一个空格。所以你设置NAME
变量的命令应该是
NAME=`security find-certificate | grep PIV | sed 's;keychain: ";;g' | sed 's;";;g'`
使用改进的sed
命令,(打印的)值NAME
不应再以名称开头,keychain:
而应仅包含名称。
由于 中的值错误NAME
,第二个security find-certificate
命令失败,因此输出The specified output could not be found in the keychain.
。之后执行的命令也会失败。
仅供参考,参考的原因/dev/fd/63
在问题的答案中解释了为什么进程替换会产生一个名为 /dev/fd/63 的文件,它是一个管道?
推荐阅读
- python - 无法在 python 3.9 中导入我自己的模块
- java - 在 schema.sql 中创建表与通过 H2 控制台创建表的奇怪行为?
- typescript - 是否可以在打字稿的映射类型中推断函数的返回类型?
- sorting - 将数据从一张纸排序到另一张纸,仅提取特定数据
- asp.net-mvc - 如何自定义内置 MVC 验证响应格式?
- reactjs - Boostrap 模态反应钩子
- arrays - ARIMA 的预测时间序列似乎没有考虑到活动的结束
- android - 如何编程将 recyclerview 中的每隔一个项目重新绘制为不同的颜色?(线性布局)
- c# - C# - 将嵌套的 json 反序列化为嵌套字典
- google-apps-script - 在我的所有文档上使用我的 Google 文档插件(并发布它)