当我尝试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\""
这也行得通,但是这里外层和内层都使用了双引号,因此内层需要转义。