
SSH 経由で実行しようとすると、codesign --force --deep-verify --verbose --sign "CERT-NAME" ...
常にエラーが発生します:The specified item could not be found in the keychain.
しかし、同じコマンドをローカルで実行すると、すべて正常に動作します。
何か案は?
答え1
実際の完全なコマンドを見ないと断言はできませんが、コマンドが2つのシェル(ローカルシェル -> sshトンネル -> リモートシェル -> codesignコマンド)を通過するため、引用符の問題が発生するのではないかと思います。各シェルは次のように解釈します。そして削除する文字列を渡す前に二重引用符とエスケープ文字を使用しており、それらの二重引用符を最終的なシェルで解釈させたい場合、引用符をもう 1 層追加する必要があるかもしれません。次に例を示します。
ssh user@server codesign --force --deep-verify --verbose --sign "CERT NAME"
これは機能しません。二重引用符はローカル シェルによって解釈され、削除されるため、最終コマンドでは (事実上) 証明書名が引用符で囲まれません。
ssh user@server 'codesign --force --deep-verify --verbose --sign "CERT NAME"'
これが機能するのは、外側の (一重) 引用符がローカル シェルによって削除され、内側の (二重) 引用符がリモート シェルによって解釈されるため、証明書名全体がcodesign
単一の引数としてコマンドに渡されるからです。
ssh user@server "codesign --force --deep-verify --verbose --sign \"CERT NAME\""
これも機能しますが、ここでは外側の層と内側の層の両方に二重引用符が使用されているため、内側の層をエスケープする必要があります。