#LolipopサーバーとGitHubの連携
作ったアプリやAPIをサーバーにデプロイする際、GitHubからpullできると便利ですよね。
GitHubを経由することで一々変更したファイル選んでアップロードとかしなくても、「ローカル側でpush → サーバー側でpull」するだけでデプロイ出来ちゃいます。
更に、GitHub Actionsを使えばpushするだけで、自動でデプロイまでしてくれるみたいです。
私もそういった方法で作ったアプリをデプロイしたくて、LolipopサーバーでGitHubとの連携を試みたのですが、鍵を作成し登録しようとした時に
$ ssh-add ~/.ssh/id_rsa
-bash: ssh-add: コマンドが見つかりません
こうなり詰みました。
そこで、色々調べていたところ、"コマンドが見つかりません"
に対する直接の解決策ではありませんが、
セキュリティ面も考慮したサーバーとGitHubの連携方法を見つけて、無事GitHubからレポジトリをcloneまですることが出来たので、
今回はその方法を記事にしたいと思います。
##概要
これからやろうとしていることは以下の通り
- 鍵を作成
- ssh-agentに鍵を登録
- GitHubにも鍵を登録
- サーバーと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 アカウント@サーバー -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 root@xxx.xxx.xxx.xxx.ZZZ
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の登録画面まで行き先ほどコピーした文字列をペーストしてください。
2. 左のメニューからSSH and GPG kyes
を選択
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しましょう