SSHのForwardAgentでローカルPCの鍵をサーバで使う

2022年8月15日

SSH

前回は macOS の ssh-agent で SSH 鍵のパスフレーズの入力を省略する方法を解説しました。

SSH
macOSのssh-agentでSSH鍵のパスワードを省略する

macOS に最初から入っている ssh-agent に SSH の秘密鍵を保持して、SSH 接続時に SSH 鍵のパスフレーズを求められないようにする設定の備忘録。 動作確認した OS は ...

続きを見る

今回はその続きで、SSH の Agent forwarding という機能の備忘録。

クライアント(今回は macOS)で ssh-agent を起動させていて、SSH の鍵を登録しているとき、そのクライアントから ssh コマンドでリモートのサーバにログインすると、サーバでもクライアントの ssh-agent が利用ができます

クライアントにある SSH の鍵を使って、サーバ上で GitHub のソースコードを一時的に clone したいときや、サーバから別のサーバに SSH でログインしたいときなどに使えます。

目次

  1. ssh コマンドの -A オプションを使ってサーバにログインする
  2. サーバで引き続き ssh-agent が利用できる
  3. 注意点

ssh コマンドの -A オプションを使ってサーバにログインする

ssh コマンドの -A オプションを使うと、ssh-agent などの認証エージェントからの接続の転送をすることができます。

ssh -A user-name@example.com

詳細は man ssh-Aオプションを参照

-A
Enables forwarding of connections from an authentication agent such as ssh-agent(1). This can also be specified on a per-host basis in a configuration file.

man ssh

-A オプションの代わりに ~/.ssh/configForwardAgent yes と指定することで同じ効果を得ることができます。

Host example.com
    ForwardAgent yes

詳細は man ssh_config コマンドの ForwardAgent の解説を参照

ForwardAgent
Specifies whether the connection to the authentication agent (if any) will be forwarded to the remote machine. The argument may be yes, no (the default), an explicit path to an agent socket or the name of an environment variable (beginning with ‘$’) in which to find the path.

man ssh_config

サーバで引き続き ssh-agent が利用できる

ssh -A オプションでサーバにログインすると、サーバでもクライアントの ssh-agent を利用できます。

ssh-agent -L コマンドで ssh-agent に登録されている鍵を確認できます。

$ ssh-add -L

ssh-ed25519 xxxx user-name@example.com

GitHub への認証が成功します。

$ ssh -T git@github.com

Hi karakaram! You've successfully authenticated, but GitHub does not provide shell access.

注意点

man ssh-A オプションに注意書きがあります。リモートホストで ssh-agent の UNIX-domain socket のファイル権限をバイパスできるユーザーは、転送された接続を使ってクライアントの ssh-agent にアクセスできます。攻撃者は ssh-agent から SSH の鍵を取得することはできませんが、その鍵に対して操作を行うことはできます。鍵を操作することで、攻撃者が ssh-agent に読み込まれた ID を利用して認証を行うことができます。

-A
Agent forwarding should be enabled with caution. Users with the ability to bypass file permissions on the remote host (for the agent's UNIX-domain socket) can access the local agent through the forwarded connection. An attacker cannot obtain key material from the agent, however they can perform operations on the keys that enable them to authenticate using the identities loaded into the agent. A safer alternative may be to use a jump host (see -J).

man ssh

ということで以下のことに気をつけて使いましょう。

  • セキュリティの更新が適用されている環境で使用する
  • 共用サーバなど管理外のサービスが動作している環境では使わない
  • 利用が終わったら SSH の接続を切断する

注意書きの最後に、より安全な代替手段として -J オプションが紹介されています。次回の記事でまとめます。

SSH
多段SSHはProxyJumpと-Jオプションで

前回は ssh-agent の Agent forwarding の紹介をしました。 前回の記事で man ssh コマンドの -A オプションの説明を読んでいたら、踏み台を経由して目...

続きを見る

-技術ブログ
-