👆 SSH-ключ, сшитый с Touch ID
Чем больше агентских сессий у меня крутится, тем меньше мне нравится, что ~/.ssh для них просто папка с файлами. Все команды они могут выполнить от моего пользователя, хоть я им это и запрещаю и делаю отдельные ключи, а приватный ключ от GitHub лежит там же, где любой другой файл. Прочитать его им ничто не мешает.
🧰 Наткнулся на гайд, как на Mac положить ключ в Secure Enclave и повесить на него Touch ID. Ставить ничего не надо, три команды: sc_auth create-ctk-identity -l ssh-key -k p-256-ne -t bio создает идентичность, ssh-add -K -S /usr/lib/ssh-keychain.dylib подключает ее к ssh-agent, а ssh-add -L отдает публичный ключ, который идет в GitHub. Приватная часть не покидает чип: ее нельзя скопировать, показать и украсть вместе с диском или через агента. Файла на диске просто нет.
Самое интересное в параметре -t. С bio каждое использование ключа требует палец, то есть любой git push, в том числе агентский, будет ждать Touch ID. Да, теряем автономность, но где-то это будет вполне оправданно. С none ключ все так же нельзя вытащить, но программы пользуются им молча.
🔗 Цена: ключ привязан к этому маку, как в принципе и со всеми passkey и прочей подобной фигней, за что я их не сильно люблю. Умер мак, умерла и айдентити, бэкапа нет, нужно создавать заново и перерегистрировать везде. Хотя проблема не такая уж большая: есть и Keychain, который синкается через iCloud, и для переноса на другие девайсы это вполне рабочая тема. Плюс ssh-add приходится повторять после каждой перезагрузки, гайд об этом честно предупреждает. Впрочем, по большому счету все это «сложности» в кавычках: и так понятно, что можно просто скормить агенту этот пост и попросить реализовать схему у себя. Руками никто уже ничего делать не будет, так что какая разница 🙃