ssh-agentを利用した認証方法(SSH接続先サーバーとDockerコンテナ)
はじめに
業務で複数台のサーバーを行き来する際に便利だったssh-agentについて解説します。これを使えば、それぞれのサーバーで認証鍵を作成し、管理する必要がなくなります。
ssh-agentがどんなものかというと
ssh先のサーバーからPC(ローカル)のssh-agentを使う方法
1. ssh-agentの起動
$ ssh-agent
unixドメインソケットファイルが生成され、ファイル名が環境変数(SSH_AUTH_SOCK)に格納されます。unixドメインソケットファイルとはLinuxプロセス間のデータ通信に使われるファイルです。
$ ssh-add
秘密鍵がssh-agentに登録される。ssh-agentに鍵が登録されているかどうかを確認するには以下のコマンドを実施する
$ ssh-add -l
3. エージェント転送(Forward Agent)機能を使用してssh接続をする
$ ssh -A hogehoge.com
エージェント転送(Forward Agent)オプション(-A)を利用する。これで、接続先のサーバーでssh-agentを使った認証が可能になる。接続先のサーバーでssh-agentが有効かどうか確認したい場合は、$ssh-add -l コマンドを実施し、エージェントに鍵が登録されているかどうかを確認する。
Dockerコンテナ内からPC(ローカル)のssh-agentを使う方法
ssh-agentはunixドメインソケットファイルを提供しており、環境変数(SSH_AUTH_SOCK)に設定されている。これをDockerコンテナ内に持っていく。
1. 一つ前の例を参考にssh-agentの起動と鍵登録をする
2. 1.で生成したソケットファイルをDockerコンテナにマウントし、環境変数(SSH_AUTH_SOCK)にソケットファイルへのパスを指定する。
environment: - SSH_AUTH_SOCK = /tmp/ssh-agent.sock volumes: - {SSH_AUTH_SOCK}:/tmp/ssh-agent.sock
上記の手順で、unixドメインソケットファイルを通してssh-agentとプロセス間通信が可能になりssh-agentを介した認証が可能になる。ローカルPCの認証鍵でDockerコンテナ内からGitの認証を通してpullできたりする。