PR
PR

【Pythonの学習 Day8】GitHubのSSHキー設定とgit cloneでリモートリポジトリをダウンロード

記事内に広告が含まれています。

Python学習の8日目は、GitHubへアクセスするためにクライアントPCへのSSHキー設定(~/.ssh/config)の方法と「git clone」について学びました。

クライアントPC(Ubuntu)とGitHubを連携させる

前回、時計サービスを提供しているVPSにGitをインストールし、GitHubと連携させました。

今回は、普段使っているUbuntu環境からもPython開発ができるよう、Gitのインストールと初期設定を行いました。

$ sudo apt update
$ sudo apt install git
$ git config --global user.name "ユーザ名"
$ git config --global user.email "メールアドレス"

GitHub接続用のSSHキー準備

別の用途で使用するためのSSHキーがすでに複数作成されていたので、用途を判別しやすいように以下のようにキーの名前を変更して、GitHub用のキーを作成しました。

$ ssh-keygen -t ed25519 -C "tamohiko@server-memo.net"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/tamohiko/.ssh/id_ed25519): /home/tamohiko/.ssh/ed25519_GitHub
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
  • 秘密鍵:/home/tamohiko/.ssh/ed25519_GitHub
  • 公開鍵:/home/tamohiko/.ssh/ed25519_GitHub.pub

接続テストも問題無いようです。

$ ssh -T git@github.com
Hi servermemo! You've successfully authenticated, but GitHub does not provide shell access.

git cloneでリポジトリをコピーしようとしたら…

ローカルPCにインストールしたGitの準備が整ったので、いよいよGitHubからリポジトリをダウンロードしてみることにします。

GitHubにあるリポジトリをローカルのPCにダウンロードするためには、「git clone」を使うとGemini先生に教えてもらいました。

まずは、リポジトリをダウンロードするためのディレクトリとして「~/project」を作成し、そこでgit cloneを実行しました。

$ mkdir ~/porject
$ cd ~/porject
$ git clone github.com:servermemo/time_app.git
Cloning into 'time_app'...
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/home/tamohiko/.ssh/id_ecdsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/tamohiko/.ssh/id_ecdsa": bad permissions
tamohiko@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

cloneに失敗してしまいました…

エラーメッセージを見ると、「id_ecdsa」というキーを読みに行こうとしており、そのパーミッションが0644で「Permissions 0644 for '/home/tamohiko/.ssh/id_ecdsa' are too open.(パーミッションが緩すぎます)」と指摘されています。

なぜ違う鍵を読み込もうとしたの?

GitHub接続用に「ed25519_GitHub」という名前のSSHキーを作成したはずなのに、なぜか「id_ecdsa」というキーを読みに行っています。

調べてみると、SSHクライアントは、ローカルPCに複数のSSH秘密鍵がある場合、デフォルトで特定の名前の鍵(例: id_rsa, id_ed25519など)を自動的に試す動きをするようです。

今回は、以前別の作業でテスト用に作成した「id_ecdsa」という名前のキーがたまたま存在していたため、Gitコマンドがそれを読み込んでしまい、パーミッションエラーで止まってしまった、というわけです。

正直、「sshコマンドで接続するときは-iオプションで秘密鍵を指定するのに、Gitだと不要なのかな?」と少し疑問には思っていました。

前回VPSから作業した際は問題なくGitHubにpushできていたので、Gitコマンドが自動で適切なキーを探してくれると勘違いしていたんですね。

VPSでは、デフォルト設定の「id_ed25519」という名前でSSHキーを作成していたため、たまたま問題なく接続できていた、というカラクリでした。

ちなみに、id_rsa, id_ed25519といった名前のSSHキーが「~/.ssh」ディレクトリ内に存在しない場合は、以下の用のエラーメッセージが表示されます。

$ git clone github.com:servermemo/time_app.git
Cloning into 'time_app'...
tamohiko@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

SSH Configを設定して解決!

では、GitHubに接続するためのSSHキーを指定する場合は、どのようにすれば良いのでしょうか?

Ubuntuの場合、「~/.ssh/config」というファイルを作成し、そこに設定を記述するのが一般的な方法です。

私の環境では、すでに「~/.ssh/config」に複数の設定があったので、そこに以下の内容を追記しました。

Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/ed25519_GitHub
    IdentitiesOnly yes
  • Host: この設定が適用されるホスト名
  • HostName: 実際の接続先ホスト名
  • User: 接続時のユーザー名(GitHubの場合はgit)
  • IdentityFile: 使用する秘密鍵のパスを指定
  • IdentitiesOnly yes: IdentityFileで指定した秘密鍵のみを使用し、他の鍵を自動的に試さないようにする

「~/.ssh/config」を新規作成する方法や、その他の詳しい設定については以下の記事でまとめていますので、よろしければ参考にしてみてください。

【Ubuntu】「~/.ssh/config」を使って簡単にSSHの接続を行う方法
Ubuntuから別のサーバにSSHで接続を行う際に、接続先の設定を保存しておいて簡単に接続できるようにする方法です。「~/.ssh/config」で簡単SSH接続SSHで接続を行う際にポート番号を変更していたり鍵認証方式を採用している場合、...

設定が完了した後、改めて接続テストを行ったところ、無事に成功しました!

$ ssh -T git@github.com
Hi servermemo! You've successfully authenticated, but GitHub does not provide shell access.

でも、最初もこの接続テストは成功してたのですけどね…

git clone リベンジ成功!

「~/.ssh/config」の設定が終わったので、再度「git clone」を行ってみます。

$ git clone github.com:servermemo/time_app.git
Cloning into 'time_app'...
remote: Enumerating objects: 67, done.
remote: Counting objects: 100% (67/67), done.
remote: Compressing objects: 100% (38/38), done.
remote: Total 67 (delta 0), reused 64 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (67/67), 8.59 MiB | 2.62 MiB/s, done.

エラーもなく、スムーズに処理が完了しました!

これでtime_appリポジトリの内容がローカルにコピーされたはずです。

ダウンロードされたファイルを確認してみましょう。

$ ls time_app
README.md  __pycache__  png_to_jpeg.py  static  templates  time_app.py

必要なファイルがすべてローカルに用意されました。

まとめ:GitHub連携の第一歩!SSHキー設定とgit clone

今回は、普段使っているUbuntu環境からGitHubを使って開発を始めるための、重要なステップを学びました。

SSHキーの設定と、リモートリポジトリをローカルにコピーする「git clone」コマンドです。

SSHキー設定のポイント

GitHubへのセキュアな接続にはSSHキーが必須です。

通常、GitHubへSSHキーを使って接続する場合、「~/.ssh/config」ファイルに設定を行うのが一般的です。

この設定がないと、SSHクライアントは「id_rsa」や「id_ed25519」といった特定の名前の鍵を自動的に試行します。

もし複数のSSHキーを使い分けていたり、デフォルト以外の名前の鍵を使いたい場合は、「~/.ssh/config」に明示的に設定を記述する必要があります。

これにより、意図した鍵で確実に接続できるようになります。

git cloneでリポジトリをローカルにコピー

「git clone」コマンドを使えば、GitHub上のリポジトリを簡単にローカル環境にダウンロードできます。

このコマンドを実行することで、リモートリポジトリの全履歴を含んだコピーがローカルに作成され、すぐに開発を始める準備が整います。

コメント

タイトルとURLをコピーしました