
Quando tento executar codesign --force --deep-verify --verbose --sign "CERT-NAME" ...
o SSH, sempre recebo um erro:The specified item could not be found in the keychain.
Mas quando executo o mesmo comando local, tudo funciona bem.
Alguma ideia?
Responder1
É difícil dizer com certeza sem ver o comando completo real, mas acho que você provavelmente está enfrentando problemas de cotação porque o comando é passado por dois shells (shell local -> túnel ssh -> shell remoto -> comando codesign ). Cada shell interpretae removeaspas e escapes antes de passar as strings, e você deseja que essas aspas duplas sejam interpretadas pelo shell final, portanto, pode ser necessário adicionar outra camada de aspas. aqui estão alguns exemplos:
ssh user@server codesign --force --deep-verify --verbose --sign "CERT NAME"
Isso não funciona porque as aspas duplas são interpretadas e removidas pelo shell local, portanto, o comando final (efetivamente) tem o nome do certificado sem aspas.
ssh user@server 'codesign --force --deep-verify --verbose --sign "CERT NAME"'
Isso funciona porque as aspas externas (simples) são removidas pelo shell local, deixando as aspas internas (duplas) para serem interpretadas pelo shell remoto, portanto, ele passará o nome inteiro do certificado para o codesign
comando como um único argumento.
ssh user@server "codesign --force --deep-verify --verbose --sign \"CERT NAME\""
Isso também funciona, mas aqui aspas duplas são usadas para a camada externa e interna, portanto, a camada interna precisa ser escapada.