Что такое SSH и для чего они нужны лучше чем уже сказано на Хабре рассказать не смогу. Потому лишь добавлю что внезапно а в версии 10.12.2 macOS обновилась библиотека OpenSSH 1 и логика работы с ключами. Что конечно же все сломало — ssh-ключи не загружаются после загрузки системы. Что очень неудобно при работе Sourcetree, Github, хостингами да и вообще. Так что подготовил инструкцию больше для себя как исправить включая все шаги.

  1. Создаем ключ если его еще нет. Инструкций с картинками в сети полно, например, на Github.
  2. Добавляем passphrase ключа в системный Keychain
ssh-add -K /path/to/my/key.pem

для варианта когда ваша версия macos старше выше чем 12.0 то команда должна выглядеть как: 2

ssh-add --apple-use-keychain /path/to/my/key

Если появляется ошибка WARNING: UNPROTECTED PRIVATE KEY FILE!3 то необходимо настроить права доступа, дабы другие пользователи в сиcтеме не имели доступ к файлу, а именно запустить команду:

sudo chmod 600 /path/to/my/key

ну и поставить такие же права на всю папку ~/.ssh

sudo chmod 755 ~/.ssh
  1. Добавляем ключ в ssh-agent ssh-add -A4 4. Добавляем файл или редактируем файл ~/.ssh/config и вносим параметры параметры:

    Host \*
    UseKeychain yes
    AddKeysToAgent yes

  2. Теперь нужно команду ssh-add -A автоматически на старте системы. Первый вариант один через скрипт в ~/.bash_profile:

 ssh-add -A 2>/dev/null;
  1. другой через файл загрузки в ~/Library/LaunchAgents/ 5 Содержание файла с расширением .plist:

     <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     <plist version="1.0">
     <dict>
     <key>Label</key>
     <string>ssh-add-a</string>
     <key>ProgramArguments</key>
     <array>
         <string>ssh-add</string>
         <string>-A</string>
     </array>
     <key>RunAtLoad</key>
     <true/>
     </dict>
     </plist>
      

  2. Если не хотим каждый раз вводить пароль — в настройках “связки ключей” снимаем галочку об автоматической блокировке.{% include gallery %} #todo