macOS Sierra - ошибка: указанный элемент не может быть найден в цепочке для ключей - в пределах ssh

Когда я пытаюсь бежать codesign --force --deep-verify --verbose --sign "CERT-NAME" ... через SSH я всегда получаю ошибку: The specified item could not be found in the keychain.

Но когда я запускаю ту же команду локально, все работает нормально.

Есть идеи?

1 ответ

Решение

Трудно сказать наверняка, не видя фактической полной команды, но я предполагаю, что вы, вероятно, сталкиваетесь с проблемами цитирования, потому что команда проходит через две оболочки (локальная оболочка -> туннель ssh -> удаленная оболочка -> команда codeign)). Каждая оболочка интерпретирует и удаляет кавычки и экранирует их перед передачей строк, и вы хотите, чтобы эти двойные кавычки интерпретировались конечной оболочкой, поэтому вам может понадобиться добавить еще один слой кавычек. Вот некоторые примеры:

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\""

Это также работает, но здесь двойные кавычки используются как для внешнего, так и для внутреннего слоя, поэтому внутренний слой необходимо экранировать.

Другие вопросы по тегам