Я храню различные пароли (например, для удаленных почтовых серверов) в моей цепочке для ключей. Из командной строки при локальном входе я могу получить их через:
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
).
Ответы:
При воспроизведении этого для расследования я замечаю, что моя цепочка для ключей настроена на «Подтверждение перед разрешением доступа». Поэтому, когда я выполняю
find-internet-password
локально с-g
флаг, я получаю диалоговое окно с указанием служба безопасности хочет использовать вашу конфиденциальную информацию, хранящуюся на «smtp.gmail.com» в вашей цепочке для ключей. Если я нажимаю «Разрешить», то это работает, если я нажимаю «Запретить», то происходит сбой аналогичноssh
регистр с кодом возврата51
,Когда я пытаюсь команду удаленно через
ssh
,-g
немедленно приводит к сбою со статусом36
что вы сообщаете.Я подозреваю, что это потому, что, когда вы
ssh
Во-вторых, система не может открыть диалоговое окно, позволяющее подтвердить, что вы хотитеsecurity
Команда для доступа к этой информации.Я смог заставить команду работать, пока подключен
ssh
сначала нажав опцию «Всегда разрешать» при локальном запуске команды. Это обновляет разрешения в связке ключей, так что мне больше не нужно отвечать на диалог (даже локально), что позволяет ему работать удаленноОднако я не знаю, будет ли это для вас полностью полезным, поскольку я думаю, что это означает, что вам нужно будет предоставить
security
Запрограммируйте доступ к любым элементам цепочки для ключей, к которым вы можете получить удаленный доступ. Может быть можно написать скрипт для этого?Если вы экспериментируете с этим вручную, а затем хотите отозвать этот доступ, вы можете перейти к соответствующему элементу в Связке ключей и выбрать Получить данные и посмотрите на Контроль доступа Вкладка. Вы увидите запись для
security
там, который вы можете удалить:источник
security unlock-keychain ~/Library/Keychains/login.keychain
в удаленном сеансе, где вы пытаетесь использовать связку ключей. Это запросит ваш пароль, поэтому вы не можете сделать это в скрипте. Могут быть способы достичь этого без пароля, но это выходит за рамки этого вопроса :)/Users/[user]/Library/Keychains/
путь вы можете пропустить полный путь и идти только сlogin.keychain
,security -i unlock-keychain
у меня работает в MacOS 10.13.4 High Sierra.
После изучения решения Картика я нашел это. -I делает команду интерактивной и запрашивает ваш пароль в терминале.
источник
Пока цепочка ключей безопасности находится в расположении по умолчанию, вы можете запустить приведенную ниже команду, чтобы разблокировать ее. Он не запрашивает пароль. Это работало удаленно.
security unlock-keychain -p "enter password"
источник