macOS Sierra - 错误:在钥匙串中找不到指定的项目 - 在 ssh 中

macOS Sierra - 错误:在钥匙串中找不到指定的项目 - 在 ssh 中

当我尝试codesign --force --deep-verify --verbose --sign "CERT-NAME" ...通过 SSH 运行时,总是收到错误:The specified item could not be found in the keychain.

但是当我在本地运行相同的命令时,一切正常。

有任何想法吗?

答案1

在没有看到实际的完整命令的情况下很难确定,但我猜你可能遇到了引用问题,因为命令通过了两个 shell(本地 shell -> ssh 隧道 -> 远程 shell -> codesign 命令)。每个 shell 解释并删除在传递字符串之前,您需要使用引号和转义符,并且您希望最终的 shell 能够解释这些双引号,因此您可能需要添加另一层引号。以下是一些示例:

ssh user@server codesign --force --deep-verify --verbose --sign "CERT NAME"

这不起作用,因为双引号被本地 shell 解释并删除,所以最终命令(实际上)没有将证书名称加引号。

ssh user@server 'codesign --force --deep-verify --verbose --sign "CERT NAME"'

这是有效的,因为外部(单)引号已被本地 shell 删除,而内部(双)引号则由远程 shell 解释,因此它会将整个证书名称codesign作为单个参数传递给命令。

ssh user@server "codesign --force --deep-verify --verbose --sign \"CERT NAME\""

这也行得通,但是这里外层和内层都使用了双引号,因此内层需要转义。

相关内容