2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1Passwordのssh鍵をローカルマシンでのssh実行時のみに制限する

Last updated at Posted at 2025-04-05

sshの鍵をVaultに保管する機能が1Passwordにあります。下記の設定を~/.ssh/configに加えるようドキュメントに記載されています。

Host *
  IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"

Macのローカルマシン上でsshを使う限りは問題ないのですが、例えばiPadからMacにsshでリモートログインしたあと、git pushコマンドを実行するなどMacから別のサーバに接続すると失敗します。

これは1Passwordが認証を実行しようと、ローカルデスクトップ上で1Password GUIを起動するからです。リモートログインしているため当然デスクトップは見えず、ユーザーの反応がないのでタイムアウトしてエラーになります。

iPad側のSSHクライアントアプリ(例えば、Shelly)にSSHエージェントの転送機能がある場合、Mac側のssh鍵を使わずに、iPad側の鍵情報を利用することでこの問題を回避できます。具体的には、サンプルの~/.ssh/configを下記のように書き直します。

Match host * exec "[[ ! -n $SSH_CLIENT ]]"
  IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"

Matchを使って分岐ロジックを書くのがポイントです。環境変数SSH_CLIENTの有無で現在リモートからログインしている状態がどうかを判定し、IdentityAgentオプションを有効にしています。

FAQ

Q. ~/.zshrcにfunctionとして分岐ロジックを記述する方法は駄目なの?
A. 駄目です。中継ホスト上のシェルからさらにsshする場合は動作しますが、git pushの場合にはzsh経由でsshが実行されないので無視されてしまいます。sshクライアントの設定レベルで分岐を記述する必要があります。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?