Как я могу получить доступ к связке ключей удаленно из командной строки?

21

Я храню различные пароли (например, для удаленных почтовых серверов) в моей цепочке для ключей. Из командной строки при локальном входе я могу получить их через:

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<dumps keychain attributes, including password>

Тем не менее, результаты не могут быть достигнуты при удаленном запуске (ssh'ing в коробка откуда-то еще)

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<nothing printed, to stdout or stderr>

Более того, возвращаемое значение последней команды (с использованием -g) равно 36.

Я сбросил вывод set из локального логина и сравнил его с удаленным один, а отсутствующие переменные среды:

Apple_PubSub_Socket_Render
GPG_AGENT_INFO
SECURITYSESSIONID
TERM_PROGRAM
TERM_PROGRAM_VERSION
TERM_SESSION_ID
XPC_FLAGS
XPC_SERVICE_NAME

Что мне не хватает? я должен SSH_AUTH_SOCK установить правильное значение (возвращается от ssh-agent ).

Ether
источник

Ответы:

10

При воспроизведении этого для расследования я замечаю, что моя цепочка для ключей настроена на «Подтверждение перед разрешением доступа». Поэтому, когда я выполняю find-internet-password локально с -g флаг, я получаю диалоговое окно с указанием служба безопасности хочет использовать вашу конфиденциальную информацию, хранящуюся на «smtp.gmail.com» в вашей цепочке для ключей. Если я нажимаю «Разрешить», то это работает, если я нажимаю «Запретить», то происходит сбой аналогично ssh регистр с кодом возврата 51, Access confirmation dialog

Когда я пытаюсь команду удаленно через ssh, -g немедленно приводит к сбою со статусом 36 что вы сообщаете.

Я подозреваю, что это потому, что, когда вы ssh Во-вторых, система не может открыть диалоговое окно, позволяющее подтвердить, что вы хотите security Команда для доступа к этой информации.

Я смог заставить команду работать, пока подключен ssh сначала нажав опцию «Всегда разрешать» при локальном запуске команды. Это обновляет разрешения в связке ключей, так что мне больше не нужно отвечать на диалог (даже локально), что позволяет ему работать удаленно

Однако я не знаю, будет ли это для вас полностью полезным, поскольку я думаю, что это означает, что вам нужно будет предоставить security Запрограммируйте доступ к любым элементам цепочки для ключей, к которым вы можете получить удаленный доступ. Может быть можно написать скрипт для этого?

Если вы экспериментируете с этим вручную, а затем хотите отозвать этот доступ, вы можете перейти к соответствующему элементу в Связке ключей и выбрать Получить данные и посмотрите на Контроль доступа Вкладка. Вы увидите запись для security там, который вы можете удалить: Access Control Dialog

James Elliott
источник
Я сделал то же самое - добавил команду «безопасность» в список «всегда разрешать доступ» (что также делается нажатием «Всегда разрешать» во всплывающем окне, которое появляется при локальном вводе команды), но я все еще не могу доступ к элементу цепочки для ключей удаленно после этого. Где-то должен быть другой параметр, который нужно изменить, но я не могу его найти.
Ether
1
ахахаха - это делает на самом деле работает, но нужно войти в систему с новым сеансом после изменения настроек в связке ключей, чтобы они вступили в силу. Ура! (Я добавлю ответ на этот вопрос, если когда-нибудь узнаю, как удаленно изменять привилегии доступа, но пока что настройка локально для последующего удаленного использования приемлема.)
Ether
2
Также обратите внимание - важно также запустить security unlock-keychain ~/Library/Keychains/login.keychain в удаленном сеансе, где вы пытаетесь использовать связку ключей. Это запросит ваш пароль, поэтому вы не можете сделать это в скрипте. Могут быть способы достичь этого без пароля, но это выходит за рамки этого вопроса :)
Ether
Кто-нибудь знает, могу ли я ввести пароль в командной строке для безопасности unlock-keychain?
tofutim
1
@Ether Если брелок по умолчанию /Users/[user]/Library/Keychains/ путь вы можете пропустить полный путь и идти только с login.keychain,
solgar
3

security -i unlock-keychain

у меня работает в MacOS 10.13.4 High Sierra.

После изучения решения Картика я нашел это. -I делает команду интерактивной и запрашивает ваш пароль в терминале.

Matt Clapp
источник
1

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

security unlock-keychain -p "enter password"

karthick
источник
Добро пожаловать, чтобы спросить другого! Мы пытаемся найти лучшие ответы, и эти ответы дадут вспомогательная информация почему они лучшие Ответы должны быть независимыми, поэтому объясните, почему, по вашему мнению, ответ, который вы предоставили, решит проблему или будет лучше, чем другие. Предоставление ссылок в качестве вспомогательной информации также может помочь ОП и другим найти дополнительную информацию для себя. Увидеть Как ответить о том, как обеспечить качественный ответ. - Из обзора
fsb