3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

日本CTO協会24卒Advent Calendar 2024

Day 12

ISUCON時のgithub連携を1passwordとssh-agentで少し楽にする方法

Posted at

ISUCON14お疲れ様でした。
私は昨年のISUCON13にも出場したのですが、ssh-agentの存在を知らず本番サーバーで自分以外pull、pushできないという事態に陥ったので今年はそちらを改善した(多分他の皆さんは当たり前のようにssh-agent使ってるなだろうなとは思いつつ)ので備忘録として記事に残そうと思います。

前提

私たちのチームでは、以下のフローでコードの改善を行っています。

1.本番サーバーにはいって、webapp配下のコードをgithubにあげる
2.各々がローカル環境にコードをCloneして各々のブランチで作業
3.ベンチを試したくなったら、他の人と被らないようにサーバーにSSHして、自身のブランチをpullしベンチを回す
4.スコアが上がっていそうだったら、mainブランチにmergeする

問題点

git pushをする際、githubの公開鍵をサーバーに持っていく or 認証のために本番サーバーでDeployKeyを生成してレポジトリのsettingに貼り付けたりとか何かとめんどくさいですね。

また、これが自分一人でやっている素振りの時ならいいのですが、本番サーバーには一つのgithuserしか登録されてないので、複数人で改善を行う際にはどのUserがpull、pushしたのかコミットログに残らないので不便です(多分?)

解決策

ssh-agentを使うとここらへんの面倒なところが多少楽になります。
ついでに、1passwordで秘密鍵を管理していると、もう少し幸せになれます。

ssh-agentとは?

ssh-agentはSSHキー(特に秘密鍵)を管理するためのプログラムで、SSH認証をより便利かつ安全に行うために使われます。このエージェントを利用することで、複数のSSHセッションをまたいで、一度鍵のパスフレーズを入力すれば、その後はパスフレーズを再度入力する必要なくSSH接続ができるようになります。

こんな感じでgithubの秘密鍵を登録しておくと、接続先のサーバーでもその秘密鍵が使える(フォワーディング)ようになります

//keyを登録
ssh-add ~/.ssh/id_rsa
//ssh
ssh server
// keyが登録されているかを確認
ssh-add -l
//keyの情報が出力される(登録したkeyがフォワーディングされている)

しかし、keyの登録は永続的に続かず、セッションが終了すると破棄されます。

1passwordとは?

1passwordはいわゆるパスワードマネージャーというやつで、パスワードに限らず、文書やSSHキーまで秘匿化して一元管理してくれます。
https://developer.1password.com/
また、1passwordに登録したsshKeyも当然ssh-agentに登録することができます。つまり、fowrdingも行うことができます。

ssh-addのようにCLIのセッション上で管理していないので、先ほどの述べたような、セッション切れによるkeyの登録切れが起こらないのが、1passwordでssh-keyを管理する利点です。

手順

  1. 1passwordでgithubの秘密鍵を登録しておく
    image.png

  2. ssh-agentの設定を有効にしておく
    setting→開発者からssh-agentの設定を有効にできます
    image.png

  3. ~/.ssh/configに1passwordに登録されてあるssh-keyを読み込む設定を追加
    以下の設定をconfigに追加します

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

公式Doc
https://developer.1password.com/docs/ssh/get-started/#step-4-configure-your-ssh-or-git-client

4 ./ssh/configにISUCONサーバーのHostの設定を追加する。
ForwardAgentをyesに設定しないと、フォワーディングされないので注意です。

Host isucon14-1
  HostName xxxx
  User isucon
  ForwardAgent yes
 IdentityFile ~/.ssh/hoge.pem ←練習の場合は鍵の指定必要

configを設定しない場合は-Aでフォワーディングの指定をします。

ssh -A isucon@xxxx 

これで下準備は完了で、あとはいつも通りsshするだけです

ssh先のサーバーで正常にフォワーディングされているかを確認

ssh-add -l
2048 SHA256:hogeeeeeeeeeeeeeee id_rsa (RSA)

github.comにsshできるか確認

ssh -T git@github.com
ubuntu@ip-10-0-0-161:~$ ssh -T git@github.com
Hi kojikokojiko! You've successfully authenticated, but GitHub does not provide shell access.

まとめ

1passwordとても便利なので、個人でもバンバン使っていきたいなと思いました!
また、ssh-agentのTipsは業務でもよく使うので、覚えておいて損はないと思います。

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?