
При попытке запустить codesign --force --deep-verify --verbose --sign "CERT-NAME" ...
SSH я всегда получаю ошибку:The specified item could not be found in the keychain.
Но когда я запускаю эту же команду локально, все работает нормально.
Есть идеи?
решение1
Трудно сказать наверняка, не видя полной команды, но я предполагаю, что вы, вероятно, сталкиваетесь с проблемами кавычек, поскольку команда проходит через две оболочки (локальная оболочка -> туннель ssh -> удаленная оболочка -> команда codesign). Каждая оболочка интерпретируети удаляеткавычки и экранирования перед передачей строк, и вы хотите, чтобы эти двойные кавычки интерпретировались финальной оболочкой, поэтому вам может потребоваться добавить еще один слой кавычек. Вот несколько примеров:
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\""
Это тоже работает, но здесь двойные кавычки используются как для внешнего, так и для внутреннего слоя, поэтому внутренний слой необходимо экранировать.