🔑

鍵はssh-agentに登録しよう

2024/09/12に公開

はじめに

こんにちは。大学のテスト勉強は一夜漬けのたくみです。

Devcontainerで開発していた際に、ssh-agentといったものを発見したのでまとめました。

発見した経緯

Devcontainerで開発する際に、Gitって絶対使いたいですよね?
Gitにアクセスする際にはGitにsshで接続するために公開鍵をGitに登録して自分のパソコンに秘密鍵を保存しておくと思います。

しかしながら、Devcontainerで開発すると、当たり前ですがDevcontainerのコンテナにはこれらの鍵は共有されません。
ボリューム付けすれば良いのかもしれませんが、複数人で開発している場合だったら鍵のパスが各自違うので面倒そうですよね。

そこで調べていて、ssh-agentを見つけました。

ssh-agent

内容

簡単に言うと、秘密鍵を登録しておくことで、ssh接続先でも秘密鍵を共有できるといったものになります。

使用方法

起動

eval `ssh-agent`

と入力して

Agent pid xxxxx

と出力されれば起動完了です。

秘密鍵の登録

ssh-add 秘密鍵のパス

で登録ができます。

ssh-add -l

と入力して、鍵の情報が出力されれば登録がうまくいっています!

ssh接続でssh-agentを使用する場合

ssh -A

いつものsshコマンドに-A引数を渡せばssh-agentを使用したssh接続ができます。

補足

実はssh-agentさん、僕のパソコンだと、パソコンを起動し直すと毎回プロセスが消えます。そのため登録した鍵の情報も消えます。

色々と方法はあると思いますが、僕は~/.bash_profileに起動していなかったら起動して、ssh-addするというスクリプトを書きました。

if [ -z "$SSH_AUTH_SOCK" ]; then
   RUNNING_AGENT="`ps -ax | grep 'ssh-agent -s' | grep -v grep | wc -l | tr -d '[:space:]'`"
   if [ "$RUNNING_AGENT" = "0" ]; then
        ssh-agent -s &> $HOME/.ssh/ssh-agent
   fi
   eval `cat $HOME/.ssh/ssh-agent`
fi

ssh-add $HOME/.ssh/秘密鍵のパス

参考にしたスクリプト(ほぼパクリです)

使用例: Devcontainer上でGitに接続したい

さて、使用方法はわかりました。じゃあ一体何に使えるんだいと言いたいことでしょう。

発見した経緯にも書きましたが、僕の場合大本の原因はDevcontainer上でGitが使用できないことでした。
これはコンテナ内には秘密鍵の情報が共有されず、ssh接続しようとする際に鍵がなく弾かれることが原因でした。

ここまで特定できれば、ssh-agentの使用方法を予想できますよね。
そうです。ssh-agentにGitに対する秘密鍵を登録しておいて、ssh-agentを使用してDevcontainerに秘密鍵を共有してもらえればうまくいきます!

やり方は上の使用方法を順に行っていけば良いです。
(ssh -A 鍵の部分は、Devcontainerでコンテナを開くとすれば勝手にやってくれます。)

最後に

ssh-agent、正直あんまり使用しないかもしれませんが、起動しておいて鍵を作成するたびにssh-addと叩いたほうが、もしものときに楽になるかもしれません。

ssh-keygenssh-addはセットで実行すると良いと思います。

ユニフォームネクスト株式会社

Discussion