Expertus metuit
Параноидальная настройка ssh-agent в Mac OS X Mavericks
2013-11-18 13:45
Теги: macosx, kb

Обновлено 2016-06-26: инструкция изменена для El Capitan

В стандартной конфигурации (речь дальше пойдёт про Mac OS 10.9 Mavericks и выше) при использовании ssh-ключей во встроенном ssh-клиенте парольная фраза запрашивается через макосный security-фреймворк (и стандартный диалог запроса пароля соответственно). После первого ввода пароля запускается ssh-agent и при дальнейших вызовах ssh или git c этим ключом пароль больше не запрашивается.

На мой взгляд, такая схема слишком небезопасная и нужно какое-то разумное ограниченное время жизни «запомненного» ключа в агенте, например, пара минут. Cделать это штатными средствами через диалоги/настройки невозможно, однако можно изменить файл запуска агента и выставить там нужное время жизни ключа в агенте. В результате практически при каждой попытке использовать любой ключ будет выскакивать диалог запроса парольной фразы.

Менять нужно файл /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist, добавляем два дополнительных аргумента: -t и 1 — что означает время жизни ключа в одну секунду. Однако с версии 10.11 (El Capitan) прямое редактирование этого файла невозможно из-за включённой фичи System Integrity Protection (SIP), поэтому нужно это делать из recovery-режима:

  • перезагружаем компьютер;
  • в процессе перезагрузки держим нажатыми cmd+R (⌘+R);
  • в меню выбираем UtilitiesTerminal;
  • в терминале выполняем команду csrutil disable, чтобы отключить SIP
  • перезагружаемся;
  • правим файл;
  • загружаемся опять в recovery-режим и снова включаем SIP: csrutil enable;
  • перезагружаемся.

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>org.openbsd.ssh-agent</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/ssh-agent</string>
        <string>-l</string>
        <string>-t</string>
        <string>1</string>
    </array>
    <key>ServiceIPC</key>
    <true/>
    <key>Sockets</key>
    <dict>
        <key>Listeners</key>
        <dict>
            <key>SecureSocketWithKey</key>
            <string>SSH_AUTH_SOCK</string>
        </dict>
    </dict>
        <key>EnableTransactions</key>
        <true/>
</dict>
</plist>

В файле добавлены две строки:

        <string>-t</string>
        <string>1</string>

Теперь при каждом вызове ssh будет запрашиваться парольная фраза к ключу в стандартном гуёвом окошке. Можно вместо значения в 1 секунду выбрать другой интервал.

После обновления системы файл может быть перезаписан.

Комментарии

Текст комментария (разметка: *курсив*, **полужирная**, [ссылка](http://example.com) или <http://example.com> ещё)
Имя (обязательно, 50 символов или меньше)
Email, на который получать ответы (не будет опубликован)
Веб-сайт
© 2006—2016 Sergey Stolyarov | Работает на Pyrone