
Wenn ich versuche, es über SSH auszuführen, codesign --force --deep-verify --verbose --sign "CERT-NAME" ...
erhalte ich immer eine Fehlermeldung:The specified item could not be found in the keychain.
Aber wenn ich denselben Befehl lokal ausführe, funktioniert alles einwandfrei.
Irgendwelche Ideen?
Antwort1
Es ist schwer, das mit Sicherheit zu sagen, ohne den vollständigen Befehl zu sehen, aber ich vermute, dass Sie wahrscheinlich auf Anführungszeichen stoßen, da der Befehl durch zwei Shells geleitet wird (lokale Shell -> SSH-Tunnel -> Remote-Shell -> Codesign-Befehl). Jede Shell interpretiertund entferntAnführungszeichen und Escapezeichen vor der Weiterleitung von Zeichenfolgen, und Sie möchten, dass diese doppelten Anführungszeichen von der endgültigen Shell interpretiert werden, sodass Sie möglicherweise eine weitere Ebene mit Anführungszeichen hinzufügen müssen. Hier sind einige Beispiele:
ssh user@server codesign --force --deep-verify --verbose --sign "CERT NAME"
Dies funktioniert nicht, da die Anführungszeichen von der lokalen Shell interpretiert und entfernt werden, sodass der letzte Befehl den Zertifikatsnamen (effektiv) ohne Anführungszeichen enthält.
ssh user@server 'codesign --force --deep-verify --verbose --sign "CERT NAME"'
Dies funktioniert, weil die äußeren (einfachen) Anführungszeichen von der lokalen Shell entfernt werden, während die inneren (doppelten) Anführungszeichen von der Remote-Shell interpretiert werden, sodass der gesamte Zertifikatsname codesign
als einzelnes Argument an den Befehl übergeben wird.
ssh user@server "codesign --force --deep-verify --verbose --sign \"CERT NAME\""
Dies funktioniert auch, aber hier werden Anführungszeichen sowohl für die äußere als auch für die innere Ebene verwendet, sodass die innere Ebene maskiert werden muss.