Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

WindowsのGitでSSHする方法

【初心者向けGit使い方解説】WindowsのGit BashでGithubにプライベートリポジトリを作成してSSH接続する手順・方法の解説

Githubでプライベートリポジトリを作って、Windows版GitでSSH接続する手順・方法の超初心者向けの解説。.profileや.bashrcがない場合の解決法など。

今回の記事ではGithubの初心者に向けて、プライベートリポジトリを作って、それにSSH接続する方法をわかりやすく解説します。

ネット上ではLinuxやMacでの作業手順の説明が多いですが、今回はWindows10ユーザーに向けての解説となります。

前提となる作業

  • Windows版Gitのインストール、設定
  • Githubアカウントの作成、設定
  • VS Codeなどエディタのインストール

これらは終わらせておいてください。また今回の記事ではGitやGithubがどのようなものかなどは説明しません。

作業全体の流れ

今回の作業の大まかな流れは次のとおりです。

  1. Github上でプライベートリポジトリを作る
  2. GitからGithubへSSH接続できるよう設定
  3. GithubアカウントにSSH鍵を関連づける

今回の作業環境とGit CMDとGit Bashの違いについて

今回は上述のとおり以下の条件で作業を行います。

  • Windows 10
  • Git Bash

Windows版GitにはGit CMD(Windowsのコマンドプロンプトに慣れている人向け)もありますが、今回はGit Bash(Macを含むLinux系になれている人向け)を使います。

基本的にWEB系とかサーバー関係はUnix系かMacを含むLinux系の環境において作業することが多いので、ネットなどの解説でもその環境向けの説明が多いです。

したがって、Windowsのコマンドプロンプトを使うGit CMDではなく、Macを含むLinux系の操作に従うGit Bashを使います。

Git Bashの画面がこちらです。

Git Bashの画面
Git Bashの画面

Githubにプライベートリポジトリ作成する手順・方法

プライベートリポジトリを作成

まずGithubの自分のアカウントのホームへ。

DjangoのPythonアプリをAWSデプロイする方法

そして矢印①でリポジトリの名前を好きなようにつけて入力しましょう。今回は「Django_on_AWS」としました。

矢印②では「Private」に設定。今回は個人的な練習目的なので公開する必要もないですし。

矢印③で「Creat a new repository」を押して、新規リポジトリを作成します。

add .gitignoreの設定について

.gitignoreファイルを作成すると、公開すべきでないファイルを除外するよう自動的に設定されます。いわばGitによる管理から外すファイルを設定できるわけです。うっかり情報を漏洩することを回避しやすくなるわけですね。

今回はたとえばPythonファイルをGitの管理から除外することを例にします。その手順は以下の通りです。

DjangoのPythonアプリをAWSデプロイする方法

このページの丸印のところに項目「 .gitignore」があります。それをクリックします。

DjangoのPythonアプリをAWSデプロイする方法
DjangoのPythonアプリをAWSデプロイする方法

入力欄がありますので「python」と入力します。途中まで入力すると候補が出てきます。

最後にページ一番下にあるボタン「creat a new repository」を押して変更を保存します。

DjangoのPythonアプリをAWSデプロイする方法

こうして.gitignoreを作成できました。

GitからGithubへSSH接続できるよう設定する手順・方法

Github公式:SSH を使用した GitHub への接続

基本的にはこの公式ページにある通りにすすめていくだけです。

「.ssh」という名前のフォルダを作る、または、存在しているか確認

まずSSH接続するための鍵を保存するフォルダ(ディレクトリ)をパソコンに作りましょう。すでにあれば作る必要はありません。

そのフォルダの名前ですが、基本的には、

.ssh

という名前にします。そのようなフォルダがなければ作りましょう。

場所はどこでもいいと思いますが、

  • Windowsの場合は、C>Users>みなさんのユーザー名>.sshフォルダ
  • Macの場合は、

というように作るのが無難だと思います。

Windowsのエクスプローラーの画面がこちらです。

hogehogeフォルダの中に.sshフォルダを作ります

このように、「Cドライブ>Users(ユーザー)>hogehoge>.ssh」というように作りたいわけです。

さてGit Bashを開くと次の画面となりますが、

Git Bashの画面
起動直後のGit Bashの画面

ここではウインドウ最上部に「/c/Users/hogehoge」とあります。このhogehogeはみなさんのWindowsマシンを購入したときに最初に登録したユーザー名(アカウント名)です。Cドライブの中にUsersフォルダ(”ユーザー”というフォルダ)があって、その中にhogehogeのフォルダがあることになります。

このようにウインドウ最上部に表示されている場所が、Git Bash上での作業の基準となる場所(フォルダ)です。自分がどのフォルダを基準にしているのかわからなくなったら、その部分を見て確かめましょう。

そのhogehogeフォルダの中に、「.ssh」という名前のフォルダがあればそれでOKです。なければ作りましょう。「.ssh」の「.」を忘れずに。ピリオド+sshという文字です。

その.sshフォルダを作るには、Git Bash起動させた後に、

$ mkdir .ssh

と書いてリターンキーを押せば、簡単に作成できます。

今回は「/c/Users/hogehoge」の下、つまりhogehogeフォルダの中に.sshというフォルダができあがります。

このようにhogehogeフォルダの中に「.sshという名前のフォルダ」を作るのが最も楽でしょうし、普通はそれで十分だと思います。

今回はまさにその場所に.sshフォルダを作ったとします。

次にGit Bash上でその.sshフォルダへ移動します。この手順を忘れないようにしましょう。以下のコマンドを入力します。

$ cd ~/.ssh
Git bashの画面
Git Bashの画面

このように入力して、決定(エンターキー)を押すと作業するフォルダ(ディレクトリ)が 「Cドライブ>Users(ユーザー)>ユーザー名>.sshフォルダ」へと移動します。ウインドウ最上部で基準となった場所を再確認してください。

SSH鍵の作成

次にSSH鍵を作成します。以下のコマンドを入力します。

$ ssh-keygen -t ed25519 -C "Githubに登録しているメールアドレス"
(入力例:$ ssh-keygen -t ed25519 -C "ageage@gggg.com")

ここで、

Enter a file in which to save the key (/c/Users/hogehoge/.ssh/id_~):[Press enter]

と出たら、エンターキーを押してください。今のGit Bash上の作業フォルダ(この記事の設定だと、/c/Users/hogehoge/.ssh/)に保存されます。その保存場所を変更したいなら、保存場所へのパスを入力しましょう。

そして、パスフレーズの入力へ移ります。

Enter passphrase(Empty for no passphrase)

というメッセージが現れますので、passphrase(パスフレーズ)を入力します。パスフレーズを設定しなくても使えるようですが、セキュリティも高まりますし、練習がてら(?)設定しておいたほうが良いでしょう。

パスフレーズはなんでもいいです。無難に半角英数字で10~30文字のランダムなものをテキトーに入力します。メモ帳にでも書いてから、それを見ながら入力すると良いでしょう。このパスフレームはいろいろな作業で使うことになりますので保存しておきましょう。

(なおパスフレーズは後で追加・変更できます。参照:Github公式:SSH キーのパスフレーズを使う

いったん入力すると、

Enter same passphrase again

と表示されるので、確認のため同じパスフレーズを入力します。

間違えると次のように再びパスフレーズを入力するよう言われます。

Passphrases do not match. Try again

正しく入力できるまで頑張りましょう。

Git Bash

このような画面になれば成功です。

SSH鍵のファイルが出来上がっているか確認しましょう。

$ ls -al ~/.ssh

と入力します。

Git Bash

このように新規作成されたファイルの名前や作成日時などが表示されるはずです。

ssh-agentの起動と設定

ssh-agentというSSH鍵をいい具合に管理してくれるプログラムがあります。まずそれを起動させます。

$ eval "$(ssh-agent -s)"

起動すると、

Agent pid 数字

と表示されます。

続いて、それにSSH鍵の情報(今回だとid_ed25519というファイル)を渡します。

$ ssh-add ~/.ssh/id_ed25519

確認します。

$ ssh-add -l
Git Bashの画面

こんな感じで、ランダムな英数字記号が表示されると思います。

このssh-agentですが、実はGit Bashを終了させると毎回設定がリセットされます。つまりGit Bashを起動させるたびに毎回ssh-agentを起動して鍵を渡すという作業が必要になります。

そこでGit Bashを起動させると同時にssh-agentも起動できるよう設定することができます。

ssh-agent の自動起動設定とprofileと.bashrcが見つからない場合の解決方法について

公式ドキュメントでは、まさに「Git for Windows で ssh-agent を自動的に起動する」という項目があります。その内容をそのままやるだけです。

その公式ドキュメントでは、

bash または Git シェルを開いたときに、ssh-agent を自動的に実行できます。 次の行をコピーし、Git シェルの ~/.profile または ~/.bashrc ファイルに貼り付けます。

と書いてあるのですが、普通のWindowsでは、「.profile」「.bashrc」というファイルは存在しないことが多いのではないでしょうか。

ない場合は作ります。VS Codeなどのエディタで新規ファイル(中身は当然からっぽ)を開き、次のコードをそのままコピペします。上のMS公式ドキュメントに掲載されているものです。

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

次にそのファイルを名前をつけて保存するわけですが、名前は、

  • .profle
  • .bashrc

のどちらでも動くのは動きます。

しかし、.bahsrcにした場合は改めてGit Bashを起動させたときに、以下の警告メッセージが出る可能性があります。

Git Bashの画面
WARNING: Found ~/.bashrc but no ~/.bash_profile, ~/.bash_login or ~/.profile.

This looks like an incorrect setup.

これが心配ならば、.bashrcではなく、.profileというファイル名にして保存しましょう。保存する場所ですが、いわゆるホームディレクトリです。.sshフォルダではないので注意してください。

今回の記事の場合ならば、Windowsパソコンのユーザー名(アカウント名)であるhogehogeフォルダ(c/Users/hogehoge)の中に置きます。上の画像にhogehogeフォルダがありますが、その中に置きます。

では改めてGit Bashを起動させてください。

きちんと起動すれば、上述のssh-agentの鍵情報を登録したときと同じように、

$ ls -al ~/.ssh

とでも入力してみてください。

Git Bashの画面

同じように表示されると思います。

GithubアカウントにSSH鍵を関連づける手順・方法

最後に、Githubアカウントに公開鍵の情報を登録して終了となります。

まずGit Bashに次のコマンドを入力します。

$ clip < ~/.ssh/id_ed25519.pub

これは、公開鍵のファイル「id_ed25519.pub」(pub:public、公開)の中身をクリップボードにコピーするものです。

もしクリップボードにコピーできていなければ、VS Codeなどのエディタでid_ed25519.pubを開いて中身を全部コピーしましょう。

次にGithubの自分のアカウントにアクセスしまして、「setteing」項目へ。

Github

次に「SSH and GPG keys」項目へ。

github

「SSH Keys」の項目に、ボタン「New SSH Key」があるのでクリック。

次に下画像のように、クリップボードの中身を項目「Key」欄に貼り付けましょう。

Github

Title欄にはテキトーにわかりやすい名前を、項目「key」欄にはクリップボードにコピーしてる公開鍵情報をそのままペーストします。

最後にボタン「Add SSH key」を押します。

このように追加した鍵情報が表示されれば成功です。

ではGit Bashにもどり、きちんと接続できるか試してみます。次のコマンドを入力します。

$ ssh -T git@github.com

次のようなメッセージが出ればOKです。

Hi 1978works! You've successfully authenticated, but GitHub does not provide shell access.

続いて、今回作ったプライベートリポジトリ「Django_on_AWS」をクローン(自分が使ってるPCにデータを複製する)してみましょう。

how to clone from github repository

リポジトリ一覧から「Django_on_AWS」を選び、ボタン「<>Code」(上画像の緑色のボタン)をクリックします。

そして「SSH」選んでから、二重□のアイコンをクリックしてアドレスをコピーします。

そのアドレスを使い、Git Bash上で次のように入力。

$ git clone git@github.com:1978works/Django_on_AWS.git
how to clone from github

こんな表示がされれば成功です。

これでGithubへのSSH接続の手順の説明は以上です。お疲れ様でした。

愛を分かち合いましょう