Як я можу отримати доступ до брелока віддалено з командного рядка?


23

Я зберігаю різні паролі (наприклад, для віддалених серверів електронної пошти) у своїй брелок. З командного рядка, коли ви входите локально, я можу отримати їх за допомогою:

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>

Однак результатів неможливо досягти при віддаленому запуску (ввімкнення у поле з іншого місця):

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).


Відповіді:


11

Відтворюючи це для дослідження, я помічаю, що у мене брелок, налаштований на «Підтвердити, перш ніж дозволити доступ». Отже, коли я виконую find-internet-passwordлокально -gпрапор, я отримую діалогове вікно, де безпека хоче використовувати вашу конфіденційну інформацію, що зберігається в «smtp. gmail.com "у вашому брелоку. Якщо я натискаю "Дозволити", це працює, якщо я натискаю "Заборонити", це не відповідає аналогічному sshвипадку, з кодом повернення 51. Діалогове вікно підтвердження доступу

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

Я підозрюю, що це тому, що, коли ви входите sshв систему, немає можливості, щоб система вискочила діалогове вікно, що дозволяє підтвердити, що ви хочете дозволити securityкоманді отримати доступ до цієї інформації.

Мені вдалося змусити команду працювати під час з'єднання, sshнатиснувши параметр «Завжди дозволяти», коли команда виконується локально. Це оновлює дозволи в Keychain, так що мені більше не потрібно відповідати на діалогове вікно (навіть локально), що дозволяє йому працювати і віддалено.

Я не знаю, чи це буде вам цілком корисно, однак, я думаю, що це означає, що вам потрібно буде попередньо надати securityпрограмі доступ до будь-яких елементів брелоків, до яких ви, можливо, захочете отримати доступ дистанційно. Можливо, можна написати сценарій для цього?

Якщо ви експериментуєте з цим вручну і пізніше хочете відкликати цей доступ, ви можете перейти до пункту, який впливає на нього, у Keychain Access, вибрати Отримати інформацію та переглянути вкладку « Контроль доступу ». Ви побачите запис security, який ви можете видалити:Діалог контролю доступу


Я зробив те ж саме - додав команду 'security' до списку «завжди дозволяти доступ» (що також робиться натисканням кнопки «Завжди дозволяти» у спливаючому вікні, що з’являється при видачі команди на місцевому рівні), але я все одно не можу відкрийте доступ до предмета брелока віддалено після цього. Десь має бути інше налаштування, яке потрібно змінити, але я не можу його знайти.
Ефір

1
ахахаха - це робить на насправді працюють, але потрібно увійти в систему з нової сесії після зміни налаштувань в брелок для них вступили в силу. Ура! (Я додам відповідь на це запитання, якщо коли-небудь дізнаюся, як віддалено змінити привілеї доступу, але налаштування речей на місцевому рівні заздалегідь для подальшого віддаленого використання наразі прийнятна.)
Ефір,

2
Також зверніть увагу - важливо також запуститись security unlock-keychain ~/Library/Keychains/login.keychainна віддаленому сеансі, де ви намагаєтесь використовувати брелок. Це підкаже ваш пароль, тому ви не можете це зробити в сценарії. Можливо, способи досягти цього без пароля, але це не виходить за межі цього питання :)
Ефір,

хтось знає, чи можу я ввести пароль у командному рядку для блокування брелоків безпеки?
tofutim

1
@Ether Якщо брелок стоїть на /Users/[user]/Library/Keychains/шляху за замовчуванням, ви можете опустити повний шлях і піти просто login.keychain.
сольгар

5

security -i unlock-keychain

працює для мене в MacOS 10.13.4 Висока Сьєрра.

Дослідивши рішення Картіка, я знайшов це. Команда -i робить інтерактивну команду та запитує вас у терміналі для отримання пароля.


3

Поки брелок безпеки знаходиться в місці за замовчуванням, ви можете запустити команду нижче, щоб розблокувати її. Він не вимагає ввести пароль. Це працювало віддалено.

security unlock-keychain -p "enter password"


Ласкаво просимо до "Запитайте різних"! Ми намагаємось знайти найкращі відповіді, і ці відповіді надаватимуть допоміжну інформацію щодо того, чому вони найкращі. Відповіді мають бути самостійними, тому поясніть, чому ви думаєте, що надана вами відповідь вирішить проблему чи краще, ніж інші. Надання посилань як допоміжної інформації також може допомогти ОП та іншим знайти додаткову інформацію для себе. Див. Як відповісти про те, як надати якісну відповідь. - З огляду
fsb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.