🚀

【デプロイ】ラズパイとGitHubをSSH連携する流れ ~ デプロイ方法を学ぶ ~

に公開

はじめに

現在、Rasberry Pi4(以降、ラズパイと表記)に Ubuntu Server をインストールし、ラズパイをサーバと想定したときの、サーバへのデプロイについて実装を通して学習しています。

以前、『初めてのラズパイサーバ構築 MacからSSH接続する方法【Part2】』 の記事において、作成した簡易プログラムをファイル転送したことをまとめました。

今回は、ファイルの転送ではなく、現場でも使用されているとされている、GitHubとの SSH連携 によって、実際に作成したプログラムファイルをサーバに配置して使えるようにしようと考えました。

この記事では、実際にラズパイと GitHub をどのようにしてSSH連携するのかについて、できるだけわかりやすくまとめていきます。

実装環境

Wifiルータを中心とした同一ネットワーク内に、ラズパイとPCがある状態

SSHの基礎を理解するために参考にしたURL

SSHがどのような仕組みで動いているのかについては、主に以下の記事を参考にしました。

https://qiita.com/tag1216/items/5d06bad7468f731f590e#fn2

https://qiita.com/gj5752/items/e3b4859982ac4937f504

https://clouddirect.jp.fujitsu.com/service/navi-words-ssh

https://www.agent-grow.com/self20percent/2018/11/19/what-is-hash/

https://note.com/cybernext/n/nb739df37c0b5

https://www.jipdec.or.jp/project/research/why-e-signature/PKI-crypto-mechanism.html

SSH連携を選択した理由

本番環境を想定したため

本番環境では、開発したコードをGitHubにアップロードし、そのコードをGitHubからサーバが git pull してコードの更新を行なうことが一般的です。

この環境を疑似的に作り出すため、今回ラズパイを使って実装しました。

また、サーバへのリモートアクセスの練習としてもラズパイが最適だと判断し使用しています。

「ラズパイとGitHubをSSH連携する」とは

一度、認証用の鍵ペアを交換しておくことで、今後はパスワード不要で安全に通信できる状態にすることを意味します。

ラズパイとGitHubのSSH連携は、TLSのような「共通鍵を使った暗号化通信の準備」ではなく、「公開鍵認証方式で"信頼された端末"として登録するための一度きりの認証手続きを行なう」ものです。

この手続きを済ませておくことで、以降はGitHubに安全に接続できるようになります。

今回、セキュリティをより強化するため、パスフレーズも設定しました。

ラズパイとGitHubをSSH連携する手順

前提として、ラズパイをSSHクライアント、GitHubをSSHサーバとして、公開鍵認証方式を使用しました。

1. ラズパイでSSH鍵ペアの生成と登録

Image 2025-08-08 at 15.30 (1).jpeg

SSH鍵ペアを生成するコマンド
ssh-keygen -t ed25519 -C "example@example.com"

-t ed25519 : 現在推奨されているアルゴリズムです。RSAより安全&軽量という特徴があります。

-C "example@example.com" : コメントとしてメールアドレスを登録しています。これにより、多くの鍵が登録されている環境で、「これは誰の鍵か?」とならないためのラベルの役割を果たします。
GitHubやサーバー管理者がSSH公開鍵を受け取るとき、誰の鍵かを一目で判別できるようになります。

パスフレーズを登録している場合

パスフレーズを入力し、Enterキーを押下すると、以下のように文字列が生成され、公開鍵ファイル・秘密鍵ファイルが保存されます。

Image 2025-08-08 at 15.34.jpeg

※ 今回のケースでは以下のディレクトリに保存されています。

  • 秘密鍵: home/ubuntu/.ssh/id_ed25519
  • 公開鍵: home/ubuntu/.ssh/id_ed25519.pub

cat ~/.ssh/id_ed25519.pub コマンドを実行することで、いつでも確認できます。

2. GitHubに公開鍵を登録

2-1. ラズパイで公開鍵の中身を表示

cat ~/.ssh/id_ed25519.pub

2-2. 表示された文字列をコピー

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILrTmTgD9cbE6Y6qGnWst3G+A8IkiwwAdJ0k4ANWLymb example@example.com

2-3. GitHubにログイン

2-3-1. 「Settings」を選択

Image 2025-08-08 at 15.39.jpeg

2-3-2. 「SSH and GPG keys」を選択

Image 2025-08-08 at 15.40.jpeg

2-3-3. 「New SSH key」を選択

Image 2025-08-08 at 15.41.jpeg

2-3-4. 「Title」「Key」に必要事項を入力し、「Add SSH key」を選択
  • Title
    GitHubと連携する鍵の名前をつけます。任意の名前をつけることができます。

  • Key
    先ほどの 2-2. でコピーした文字列を貼り付けます。

  • Add SSH key
    必要事項を入力し、クリックします。

Image 2025-08-08 at 15.41 (1).jpeg

これにより、GitHubは「この公開鍵に対応する秘密鍵を持っている人だけを本人とみなす」という状態になります。

3. GitHubアカウントのパスワードを入力

Image 2025-08-08 at 15.42.jpeg

パスワードの入力を求められるので、GitHubアカウントのパスワードを入力します。

4. ラズパイからGitHubにアクセスできるか確認

Image 2025-08-08 at 15.44.jpeg

SSH接続するためのコマンド
ssh -T git@github.com

これは、サーバ(今回のケースでは GitHub が SSHサーバ)のなりすましを防ぐため、サーバの公開鍵フィンガープリントをSSHクライアントであるラズパイが事前に知っているかどうかを確認しています。

SSHクライアントはSSHサーバ( GitHub )から公開鍵を受け取ります。
クライアントは受け取った公開鍵にハッシュ関数(SHA256など)をかけてフィンガープリント(ハッシュ値)を計算します。
そのフィンガープリントを known_hosts に保存・照合します。

事前にフィンガープリントが known_hosts に保存されている場合は、接続されます。

もし、フィンガープリントが保存されていない場合は、以下のようなメッセージが出力されます。

出力されるメッセージ
The authenticity of host 'github.com (IP)' can't be established.
Are you sure you want to continue connecting (yes/no)? ← yes

このコマンドは、GitHub(SSHサーバ)が信頼できる相手かどうかを確認します。
もし初めての接続であれば、以下のようなメッセージが出て「yes」と答えることで GitHub の公開鍵フィンガープリントが known_hosts に登録されます。

正常に接続できると、以下のようなメッセージが表示されます。

Image 2025-08-08 at 15.44 (1).jpeg

これで、SSH接続ができました。

※ ラズパイの.sshディレクトリには以下のファイルが存在します。

Image 2025-08-09 at 13.39.jpeg

GitHubからクローン・pullしてみる

Image 2025-08-08 at 15.47.jpeg

GitHubからクローンするコマンド
git clone git@github.com: Mavo39/backend-portfolio

これにより、ラズパイに GitHub で管理していたリポジトリをクローンすることができました。

Image 2025-08-09 at 14.25.jpeg

動作確認

ラズパイ側では実行環境を整える必要があり、仮想環境の構築やmarkdownモジュールのインストールを行ないました。
その結果、簡易CLIプログラムが正常に動作することを確認できました。

詳細は以下の記事をご参照ください。

『【ポートフォリオ 03】Raspberry Piにデプロイして動作確認をした結果』

まとめ

Ubuntu Serverをインストールしたラズパイをサーバとして、GitHubとSSH連携する方法をまとめました。

これにより、GitHub上のリポジトリの状態をいつでも git pull して更新できる環境が整いました。

今回のデプロイ過程を通じてSSHの基礎や公開鍵認証の流れを理解でき、処理内容を把握しながら進めることができました。

今後はこの環境を活用し、プログラムの規模に応じて動作確認や自動化などにも挑戦していきたいと思います。

最後までお読みいただき、ありがとうございました。

参考・画像引用元URL

https://qiita.com/tag1216/items/5d06bad7468f731f590e#fn2

https://qiita.com/gj5752/items/e3b4859982ac4937f504

https://reloop.dev/entries/6f5e2d1d364ddc1d0adc5e84494619cc

https://qiita.com/mabo23/items/2f64ede7e8a9538e20b5

https://rurukblog.com/post/ssh-fingerprint/

Discussion