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クライアントの設定で分岐を記述する必要があります。



フラッグシティパートナーズ海外不動産投資セミナー 【DMM FX】入金

Source link