Як запобігти додаванню SSH мого ключа до ssh-agent на Snow Leopard?


7

Нещодавно я почав використовувати Snow Leopard (після використання Leopard протягом декількох років), і я помітив, що коли я ssh використовуючи приватний ключ, захищений паролем, ssh автоматично додасть ключ до ssh-agent. Запитання 1: Як мені запобігти ssh від того, щоб вести себе таким чином (роблячи автоматичне додавання)?

Мені ні шукає вимкнення автоматичного запуску ssh-agent. Я фактично використовую його, але я хочу, щоб ключі були додані вручну (через ssh-add), а не автоматично.

Моє поточне рішення: Я редагував /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist для запуску з аргументом "-t 1", який добре працює. Але я боюся, що деякі оновлення програмного забезпечення повернуть його. Запитання 2: Якщо я вставлю модифікований plist у ~ / Library / LaunchAgents / чи буде проігноровано для мого користувача? Це можна вважати стабільним рішенням.


Гарне запитання, але я не бачу потреби в першому попередженні ...
Cedric H.

Починаючи після ssh-add -D, яку послідовність команд викликає додавання ключів? ssh somwhere сам по собі не повинен додавати ключі. Нещодавно запущений агент додає ключі, які мають парольні фрази, збережені в брелоку та launchd автоматично запускає агент, коли команда SSH намагається використовувати сокет рекламованого агента. Однак такі автоматично додані ключі не захищені від умовних умов -t (через помилку?), тому якщо додавати -t є ефективним, тоді ваші ключі додаються іншим чином ( ssh-add у скрипті запуску оболонки або деякі зазвичай виконуються сценарії?).
Chris Johnsen

@ chris-johnsen це ви перевіряєте Сніговий леопард ? SSH на SL діє інакше, ніж Leopard. Я знаю, що SL ssh додає мій ключ до ssh-agent, тому що я спробував це на новому Mac. Я можу очистити збережений ключ з "ssh-add-D", а потім знову отримати діалогове вікно парольної фрази, але це не є прийнятним рішенням. Вихід із системи також очистить збережений ключ (така поведінка узгоджується з виходом ssh-agent). Проблема відтворювана. Я не єдиний: serverfault.cms-forex.info/details/144147/…
Kelvin

Так, я використовую Snow Leopard, але я завжди використовував "запас" ssh замість версії, яку надає Apple. Я відтворив вашу поведінку "ssh auto-adds" з Apple ssh . Коли я досліджував цей код, я знайшов недокументовані налаштування, які виглядають так, як це вирішить вашу проблему (хоча вам доведеться відмовитися від підказки на основі інтерфейсу користувача).
Chris Johnsen

Відповіді:


5

Автоматично додані ключі

Існують три способи додавання ключів SSH ssh-агент в снігу Леопард.

  • вручну, з ssh-add ,
  • автоматично ssh при введенні ключової фрази ключа графічного інтерфейсу, і
  • автоматично ssh-агент під час першого запуску.

Останні два способи - розширення Apple: немає автоматичного доповнення з акціями OpenSSH. Всі посилання на ssh , ssh-агент , і ssh-add нижче наведені версії Apple Snow Leopard, якщо Я прикріплюю назву програми з прикметним «запасом».

Ви можете вимкнути всі модифікації SSH, орієнтовані на брелок Apple із налаштуваннями (без документів?):

defaults write org.openbsd.openssh KeychainIntegration -bool false

Клавіші додані автоматично ssh

(Це частина, яку я пропустив у попередній версії мого оригіналу відповідь, оскільки я зазвичай використовую "акції" ssh .)

Всякий раз ssh намагається використовувати ключ SSH, захищений паролем аутентифікувати себе на віддаленому хості, він видасть запит GUI для пароль ключа SSH. Ключ також завантажується в агент (якщо чи правильно вказано фразу, незалежно від того, чи ви позначите пункт “Запам'ятати пароль у моєму ключі ».

Є два (недокументовані) способи запобігання ssh від видачі це підказка GUI (і, таким чином, додати ключ SSH до ssh-агент ):

  • Налаштування параметрів:

    defaults write org.openbsd.openssh AskPassGUI -bool false
    
  • An ssh_config запис (або -o опцію ssh ), що вказує AskPassGUI no.

    (подивитися keychain_read_passphrase в keychain.c; oAskPassGUI Параметр походить від AskPassGUI налаштування конфігурації)

Коли AskPassGUI вимкнено, ssh підкаже вам у звичайному режимі для пароля ключа (тобто через tty).

Ви також можете уникнути автоматичного додавання ssh за допомогою "акції" ssh (наприклад, OpenSSH компілюється MacPorts , Домашнє "Дублікати" від домороще-альт або Fink ).

Клавіші додані автоматично ssh-агент

Клавіші, які ssh-агент автоматично додаються ті, що мають їхні фрази зберігаються в брелоку. Це "Запам'ятовані ключі" автоматично додаються після нового ssh-агент починається. Немає командного рядка або опції налаштування (окрім KeychainIntegration, описані вище) для запобігання ssh-агент від автоматично завантажує "запам'ятовані ключі" (див. виклик до process_add_from_keychain (визначено в keychain.c ) від main в ssh-agent.c ). Якщо, однак, можна організувати блокування брелоків, які зберігають ваші За допомогою ключових слів SSH можна натиснути кнопку Скасувати, коли ssh-агент просить розблокувати брелок (и) і ефективно отримати ssh-агент пропустити додавання цих “запам'ятованих ключів” під час першого запуску.

Якщо немає ssh-агент працює, ваше перше використання ssh волі ймовірно, тригер launchd , щоб почати ssh-агент які будуть завантажувати всі "запам'ятовані ключі". Це робить його схожим ssh завантажує ключі в агента, але насправді це сам агент завантаження ключів. Він робить це автоматично, коли він перший починається.

The -k варіант ssh-add надає ручний спосіб додавання “Запам'ятовані ключі” (див add_from_keychain в ssh-add.c який закінчується повідомленням агенту, який викликає process_add_from_keychain від process_message в ssh-agent.c ).

launchd Конфігурація

Ви маєте рацію, що системне оновлення може перезаписати вашу зміну файлу /System/Library/LaunchAgents/. Ви завжди повинні уникати мінливих речей /System/; більшість речей можна (повторно) налаштувати без внесення змін. У цьому випадку, схоже, ви маєте можливість перевизначити системне значення за умовчанням launchd специфікація завдання для кожного користувача з файлом у ~/Library/LaunchAgents/.

З того, що я можу сказати 1 , записи завантажуються у цьому порядку 2 :

  1. ~/Library/LaunchAgents/
  2. /Library/LaunchAgents/
  3. /Network/Library/LaunchAgents/ (немає в більшості систем)
  4. /System/Library/LaunchAgents/

Здається, це не документально, а лише перша конфігурація завдання для кожної мітки (наприклад, org.openbsd.ssh-agent ) буде збережено. Будь-яка конфігурація з більш пізнього каталогу з тією ж етикеткою, що й конфігурація з більш раннього каталогу, фактично пропускається.


1 Подивитися NSStartSearchPathEnumeration використовується в launchctl.c і визначено в NSSystemDirectories.h / NSSystemDirectories.c.

2 launchd також виглядає в LaunchDaemons/ каталоги поруч з різними LaunchAgents/ каталоги для інших типів завдань.


@ chris-johnsen Я розумію, що ви намагаєтеся бути корисними, але, будь ласка, спробуйте розібратися в деталях цієї проблеми, перш ніж викласти повне рішення.
Kelvin

Я спробую ваш "AskPassGUI" рішення, коли я на моїй SL машині. Якщо він працює, я прийму вашу відповідь. Крім того, я повернувся /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist і помістив свою модифіковану копію в / Library / LaunchAgents /. Мій мод був завантажений.
Kelvin

Працював "AskPassGUI". Схоже, що це фактично пароль, який зробив додавання до ssh-agent.
Kelvin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.