[macOS] macOS Sierra にしたら ssh の度にパスフレーズを求められる問題の解決方法

github.com へ push するとパスワードを求められるようになったので調べました。

症状

ログイン直後に調べると

% ssh-add -l
The agent has no identities.

もちろん、下記で ssh-agent にもう一度登録をし直すと、毎回パスワードをたずねられることはなくなります。

% ssh-add -K ~/.ssh/id_rsa
Identity added: /Users/****/.ssh/id_rsa (/Users/****/.ssh/id_rsa)

が、そもそも ~/.ssh/config に設定している情報を何故見てくれないのか?

対応

こちらで教えて頂きました。

結論から言うと、設定に下記の2行を加えましょう。

~/.ssh/config
Host github.com
  UseKeychain     yes
  AddKeysToAgent  yes

ssh-add -D してから試しましょう。

何故か?

OpenSSH のバージョンが v7 系に変わったから。

% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12.2
BuildVersion:   16C67
% ssh -V
OpenSSH_7.3p1, LibreSSL 2.4.1

以前は v6.9 だったようです。

新機能 AddKeysToAgent のデフォルトが no である。

sshコマンドにおいてAddKeysToAgent clientのオプションとして’yes/no/ask/confirm’が設定できるようになった(デフォルトは’no’)。

UseKeychain のデフォルトが no である。
確かに man ssh_config すると書いてあった。

AddKeysToAgent
       Specifies whether keys should be automatically added to a running ssh-agent(1).  If this option is set to
       ``yes'' and a key is loaded from a file, the key and its passphrase are added to the agent with the
       default lifetime, as if by ssh-add(1).  If this option is set to ``ask'', ssh will require confirmation
       using the SSH_ASKPASS program before adding a key (see ssh-add(1) for details).  If this option is set to
       ``confirm'', each use of the key must be confirmed, as if the -c option was specified to ssh-add(1).  If
       this option is set to ``no'', no keys are added to the agent.  The argument must be ``yes'', ``confirm'',
       ``ask'', or ``no''.  The default is ``no''.
UseKeychain
       On macOS, specifies whether the system should search for passphrases in the user's keychain when attempt-
       ing to use a particular key. When the passphrase is provided by the user, this option also specifies
       whether the passphrase should be stored into the keychain once it has been verified to be correct.  The
       argument must be ``yes'' or ``no''.  The default is ``no''.

大変助かりました。