GitHubのプライベートリポジトリをLolipopサーバーにcloneするまで


LolipopサーバーとGitHubの連携

作ったアプリやAPIをサーバーにデプロイする際、GitHubからpullできると便利ですよね。

GitHubを経由することで一々変更したファイル選んでアップロードとかしなくても、「ローカル側でpush → サーバー側でpull」するだけでデプロイ出来ちゃいます。
更に、GitHub Actionsを使えばpushするだけで、自動でデプロイまでしてくれるみたいです。

私もそういった方法で作ったアプリをデプロイしたくて、LolipopサーバーでGitHubとの連携を試みたのですが、鍵を作成し登録しようとした時に

$ ssh-add ~/.ssh/id_rsa
-bash: ssh-add: コマンドが見つかりません

こうなり詰みました。

そこで、色々調べていたところ、"コマンドが見つかりません"に対する直接の解決策ではありませんが、
セキュリティ面も考慮したサーバーとGitHubの連携方法を見つけて、無事GitHubからレポジトリをcloneまですることが出来たので、
今回はその方法を記事にしたいと思います。

概要

これからやろうとしていることは以下の通り
1. 鍵を作成
2. ssh-agentに鍵を登録
3. GitHubにも鍵を登録
4. サーバーとGitHub繋がる!git clone, git pullができる⤴︎

そもそもssh-agentとは

鍵を預かってくれる仕組みのこと。GitHubとssh-agentが同じ鍵を持ってることで、お互いで情報のやり取りができるようになります。ssh-addというコマンドでssh-agentに鍵を登録できます。

サーバー上のssh-agentに鍵を持たすのは危険!!

GitHubとサーバーを連携させるためにサーバーのssh-agentに鍵を置いておくのはセキュリティ上あまりよろしくないそうです。サーバーは24時間誰からのリクエストにも応えるために動いているので、そんなところに鍵を保管しておくのは確かに危険ですね^^;

ではどうするか?その答えが「エージェント転送機能」です。
この機能を使えば、鍵はローカルで保管し、ローカルからその鍵を使ってGitHubとサーバーで情報のやり取りをさせることができます。

このやり方は下記の記事を参考にしました。
https://blog.wackwack.net/entry/2016/11/13/215529

手順

それでは具体的な手順です。

  • ロリポップのユーザー管理画面からsshを有効にする
  • ローカルでの作業
    • 鍵の作成
    • ssh-agentに秘密鍵を登録
    • サーバーに公開鍵をコピー
    • .ssh/configにhost追加
  • GitHubに公開鍵を登録
  • サーバーでの作業
    • ~/.ssh/configにGitHubをhostとして追加
    • gitコマンドが叩けるか確認
    • お好みの場所に欲しいレポジトリをclone

ロリポップのユーザー管理画面からsshを有効にする

ロリポップサーバー管理画面の「サーバーの管理・設定」からSSHを選択
以下の画面が出たらSSHを有効にするボタンをクリック

SSHの有効が完了すると以下のような画面が表示されます

ローカルのターミナルから次のコマンドでサーバーにログインできるか確かめてみましょう

$ ssh アカウント@サーバー -p接続ポート

アカウント サーバー 接続ポートはSSH有効化完了の画面に表示されているものを使ってください

パスワードを聞かれるので、SSH有効化完了画面のパスワードを入力して以下のような表示になったらログイン成功です

次はローカルで作業するのでexitコマンドで一旦ログアウトしましょう。

ローカルでの作業

1. 鍵の作成

ローカルに戻りssh-keygenコマンドで鍵を作ります

$ ssh-keygen
Generating public/private rsa key pair.

# 鍵の保管場所を聞かれます。デフォルトで/root/.ssh/id_rsa
Enter file in which to save the key (/root/.ssh/id_rsa):

# パスフレーズの設定を聞かれます。未設定のままでもOK。
Enter passphrase (empty for no passphrase):
Enter same passphrase again: # パスフレーズ再確認

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx [email protected]
The key s randomart image is:
+---[RSA 2048]----+
| ..o             |
|. + oo . .       |
| = *+ o . .      |
|o B..+.   .o     |
| キラキラしたやつ  |
|. +o+oo ..=+     |
| oo=o+   =  .    |
|..o.o.  . .      |
|++oo.            |
+----[SHA256]-----+

次のコマンドで鍵を確認

$ ls -al ~/.ssh
total 8
-rw-------   1 xxxxxxxx  staff  2622 Dec  8 21:57 id_rsa
-rw-r--r--   1 xxxxxxxx  staff   585 Dec  8 21:57 id_rsa.pub

2. ssh-agentに秘密鍵を登録

今現在ssh-agentで管理している秘密鍵があるか確認します。

$ ssh-add -l
The agent has no identities

無ければ次のコマンドでssh-agentに秘密鍵を登録

ssh-add ~/.ssh/id_rsa

もう一度確認してみると

$ ssh-add -l
2048 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

これで、ssh-agentに秘密鍵が登録されてることが確認できました。

3. サーバーに公開鍵をコピー

$ ssh-copy-id -i ~/.ssh/id_rsa.pub アカウント@サーバー -p接続ポート

アカウント サーバー 接続ポートはサーバーにログインする時と同じものです。
パスワードも聞かれるので同じものを入力しましょう。

4. .ssh/configにlolipopをhostとして追加

.ssh/configを開きます。

$ vi .ssh/config

次の設定を入力します。

Host lolipop
  HostName     <サーバー>
  Port         <接続ポート>
  User         <アカウント>
  IdentityFile ~/.ssh/id_rsa

このホストの設定が完了すると、ssh lolipopだけでパスワードなしでサーバーにログインできます。

GitHubに公開鍵を登録

先ほど作った公開鍵を開きます

$ vi ~/.ssh/id_rsa.pub

次のような文字列が表示されるのでssh-rsa ~から~ xx=までをコピーします。

ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= xxxxxxx@xxxxxxx
~

GitHubのページから次の画像の順番でSSHの登録画面まで行き先ほどコピーした文字列をペーストしてください。

1. 右上のメニューからSettingsを選択

2. 左のメニューからSSH and GPG kyesを選択

3. New SSH keyを選択

4. タイトルは自分がわかる名前をつけましょう。Keyの欄に先ほどコピーした鍵をペーストしてAdd SSH keyを押せば登録完了

サーバーでの作業

次にサーバー側の設定です。

~/.ssh/configにGitHubをhostとして追加

$ vi ~/.ssh/config

configを開いたら、以下を入力

Host github
  HostName github.com
  Port 22
  User git
  ForwardAgent yes

このForwardAgent yesエージェント転送機能を有効にしてます。
一度ログアウトしてssh -A lolipopでログインするとエージェント転送機能でGitHubとの連携ができています。

後は

お好みの場所に欲しいレポジトリをcloneしましょう