sshの鍵をVaultに保管する機能を1Passwordが提供しています。下記の設定を~/.ssh/config
に加えるようドキュメントに記載されています。
Host *
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
Macのローカルマシン上でsshを使う限りは問題ないのですが、たとえばiPadからMacにsshでリモートログインしたあと、Macから別のサーバに接続したい場合、例えばgit pushコマンドを実行すると失敗します。
これは1Passwordが生体認証を実行しようと、ローカルデスクトップ上に1Password GUIを起動するからです。ユーザーの反応がないのでタイムアウトしてエラーになります。
iPad側のSSHクライアントアプリ(例えば、Shelly)にSSH Agentの転送機能がある場合、Mac側のssh鍵を使わなずに、iPad側の鍵情報を優先的に利用することでこの問題を回避できます。具体的には、サンプルのConfigを下記のように書き直します。
Match host * exec "[[ ! -n $SSH_CLIENT ]]"
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
Matchを使って分岐ロジックを書くのがポイントです。
FAQ
Q. ~/.zshrc
にfunctionとして分岐ロジックを記述する方法は駄目なの?
A. 駄目です。中継サーバ上のシェルからさらにssh
する場合は動作しますが、git push
の場合にはzsh経由でsshが実行されるわけではないので無視されてしまいます。sshクライアントの設定で分岐を記述する必要があります。
Views: 0