LoginSignup
11
4

More than 1 year has passed since last update.

🔰【Win/Mac】はじめてのSSH接続🤫GitHubからリポジトリをクローンしてみよう!

Last updated at Posted at 2022-04-18

HTTPSクローンしかやったことがなかったあなたへ贈るSSHクローン総まとめ🌟
SSH Keysの発行~リポジトリのクローンまで、GitHubを例にやってみよう!

前提

  • Windows10 または macOS Monterey 12.0.1 想定
  • Windowsの場合はスタンダードサイズ・フルサイズなどのキーボード(Insertキーが使えるもの)
  • 管理者アカウント
  • Gitのユーザ設定が適切に設定されている(本記事の工程をすべて終えた後に設定してもOK)
    • git config --global user.name
    • git config --global user.email

Package managerを入れよう
ソフトウェアインストールが楽になるのであらかじめ、WindowsならChocolatey、macOSならHomebrewを入れておきましょう!👀

※ これらを利用しない場合でも、任意の方法で必要なソフトウェアをインストールできます
※ それぞれの記事のchocobrew以外の内容も見ていただけるとうれしいです☺

1. 環境を整えよう

後に続く表に沿って、この記事で必要なアプリケーションがインストールされているか確認します。

まずはシェルを開きましょう。

  • Windows:PowerShell
  • macOS:ターミナル、iTerm2など

表の行ごとに、次のステップを繰り返してください。

  1. シェルに「バージョンの確認方法」を入力しEnterキーを押す
  2. バージョンが返ってくるか確認する
    確認できない:「Windows用」または「macOS用」のコマンドを実行して「2」に戻る
    確認できた: 次のアプリをご確認ください

コマンドは大文字小文字を区別します

アプリケーション バージョンの確認方法 Windows用 macOS用
Git git --version choco install git.install -y brew install git
OpenSSH ssh -V choco install openssh -y brew install openssh
vim vi --version(ちょっと長め) choco install vim -y 対応不要1

【Windowsのみ】SSHを有効にする
管理者権限のPowerShellで以下のコマンドを実行してください。

Set-Service -Name ssh-agent -StartupType Manual
Start-Service ssh-agent

2. SSH keysを発行しよう

次のコマンドを1行ずつ、シェルで実行します。

Windows向け
cd ~         # ユーザルートディレクトリに移動します(C:/User/アカウント名)
Get-Location # 現在のディレクトリを確認します
ls           # 現在のディレクトリの中身を確認します
macOS向け
cd ~         # ユーザルートディレクトリに移動します(/User/アカウント名)
pwd          # 現在のディレクトリを確認します
ls -l        # 現在のディレクトリの中身を確認します

lsコマンドで.sshというフォルダが確認できなかった場合は、mkdirコマンドでフォルダを作成します。

mkdir .ssh

.ssh/ディレクトリに移動して、SSH keysを発行しましょう。

cd ~/.ssh                                          # ユーザルート/.ssh/ というディレクトリに移動

ssh-keygenコマンドを使って秘密鍵と公開鍵(SSH keys)を作成します。

ssh-keygen -t ed25519 -C "あなたのメールアドレス"    # GitHubに登録しているメールアドレスに置き換えてください

ssh-keygenでなにしてるの?
秘密鍵と公開鍵を生成しています。
-tは暗号化方式を指定するためのオプションで、ed25519というのは、つよつよな暗号方式の名前です。
-CはこのSSH keysに含めるコメントです。

入力すると、次のようなコメントが返ってきます。

Generating public/private ed25519 key pair.
Enter file in which to save the key (***************************************): 

「何てファイル名で作る?」と聞かれているので、ここでは「github_rsa」と入力しましょう。
そのあとEnterキーを押すと、パスワードを決めてくださいと言われます。

GitHub以外のサービス用にSSH keysを発行する場合
この記事の「github_rsa」をすべて「サービス名_rsa」に置き換えていただくことで、GitHub以外のための鍵を発行できます。

シェルでパスワードを入力するときの諸注意
キーを入力しても文字が入力されないように見えていますが、実際には入力することができています。
これは、何文字入力しているのかが他人から覗き見られないようにするためのセキュリティ対策です。

「Enter same passphrase again(確認用に同じパスワードを入力してね)」といわれるので同様に入力します。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

パスワードがうまく入力できると、次のようなログが出力されます。

Your identification has been saved in github_rsa.
Your public key has been saved in github_rsa.pub.
The key fingerprint is:
SHA256:****************************************** あなたのメールアドレス
The key's randomart image is:
+--[ED25519 256]--+
|                |
|                |
|                |
|                |
|      :^)       |
|                |
|                |
|                |
|                |
+----[SHA256]-----+

次のコマンドを実行して、github_rsaおよびgithub_rsa.pubファイルが生成されているのを確認します。

Windows向け
ls           # 現在のディレクトリの中身を確認します
macOS向け
ls -l        # 現在のディレクトリの中身を確認します

あとで使うため、まだシェルは閉じないでください。

ここでひと段落
「github_rsa」および「github_rsa.pub」というファイルが.sshディレクトリに生成されていない場合、何かを間違えています。
できていない場合先に進まないで、最初から手順を確認してください。

SSH Keysはだれにも教えてはいけません
ここで生成したファイルを誰かに送ったり、中身を誰かに教えたりしないでください。

3. おまじないをしておこう

SSHの設定ファイルに次の内容を追記します。
ちょっとややこしいですが、手順通りやってみましょう。

以下の内容をすべてコピーしておいてください23(ペーストはしない)。

.ssh/config
Host *
    IgnoreUnknown AddKeysToAgent,UseKeychain
    AddKeysToAgent yes
    UseKeychain yes

Host github.com
    HostName ssh.github.com
    Port 443
    User git
    IdentityFile ~/.ssh/github_rsa
  1. vi ~/.ssh/configをシェルで実行する(vimエディタでconfigファイルが開く)
  2. 何も書かれていないはずなので、先頭に貼り付ける(何かある場合は先頭に)
    Windowsの場合はShift+Insertキーを入力する(vimエディタでの貼り付け)
  3. :wqと入力する(vimエディタでの保存して終了)

貼り付けを間違えた!修正したいけど文字が消えない!
i キーを入力して編集モードに切り替えた後に修正してください。
修正が終わった後、ESCキーでノーマルモードに戻れますので、手順3を実施してください。

viコマンドの後でよくわからなくなった!または最初からやり直したい!
冷静にESCキーを数回押して、:q!と入力した後にEnterキーを押しましょう。

viコマンド「以外の」シーンでよくわからなくなった!
冷静にCtrl+Cキーを押しましょう。

4. GitHubくんに公開鍵を渡そう

なぜGitHubくんに公開鍵を渡すの?
今回作ったSSH keysのうち、「github_rsa」が秘密鍵、「github_rsa.pub」が公開鍵と呼ばれています。

公開鍵とは接続先に渡す南京錠で、「たくさんある情報の倉庫」の戸締りに使われます(暗号化用)。
秘密鍵とは、その南京錠を開けられる唯一の鍵です(複合化用)。

「私のデータが改ざんされないように、書き換える権限はこの南京錠でしっかり戸締りしてね!」と、GitHubくんと約束するために公開鍵を渡さなければなりません。

先ほどのシェル内で、次のコマンドを入力して公開鍵(github_rsa.pubファイル)の中身を確認します。
シェルを閉じてしまった人は、*.pubファイルはテキストエディタなどで開いてもOKです。

cat github_rsa.pub # Windowsではvimがインストールされていないと使えない。通常は`type github_rsa.pub`

すると、次のような文字列が返ってきます。これが公開鍵です

ssh-ed25519 ******************************************************************* あなたのメールアドレス

これを選択してコピーします。

うまくコピーできない場合は次の方法を実施してみてください。

Windowsの場合(どちらか)

  • 「右クリック」→「すべて選択」→シェル内のどこでもいいのでクリック→対象個所を選択して「Ctrl+Cキー」
  • テキストエディタで開いてコピーする

macOSの場合

pbcopy < github_rsa.pub  # .sshディレクトリにいない場合は pbcopy < ~/.ssh/github.pub

コピーできたら、GitHubくんに公開鍵を渡しに行きましょう!

  1. GitHubにログインする
  2. SettingsページからSSH and GPG keysページを開く
  3. New SSH Keyボタンをクリックする
  4. テキストフィールド「Title」に任意の文字列を入力する(今お使いのPCの名前、たとえば「何代目MacBook Proくん」とかでもOK)
  5. テキストフィールド「Key」にコピーした公開鍵を貼り付ける
  6. Add SSH keyボタンをクリックする

秘密鍵の流出にご注意!
公開鍵はいくら流出しても鍵をかける(暗号化する)だけにしか使えません。
また、公開鍵から秘密鍵を特定するのは不可能だといわれています。

一方で、もし秘密鍵を誰かに渡してしまった場合、ペアになっている秘密鍵で暗号化された情報が傍受されたりした際、あなたではない誰かが、あなたのふりをしてあなたの倉庫に入り込んできてしまいます。

万が一流出してしまった場合は、すぐにそのペアの鍵の利用を停止(削除)して、新しい鍵を作り直す必要があります。

5. 接続できるか確認してみよう

登録ができたら、無事にSSH接続ができるかどうかを試してみます。

ssh-add github_rsa

Error connecting to agent: No such file or directory になっちゃう!
ssh-agentが無効になっています。
SSHを有効にする」を参照して、コマンドを実行してから再度ssh-addしてみてください。

すると、次のような文字列が返ってきます。

Enter passphrase for github_rsa:

SSH keysを生成(ssh-keygen)したときに設定したパスワードを入力してください。

パスワードが正しければ、次のようなテキストが表示されます。

Identity added: github_rsa (あなたのメールアドレス)

ここまでできたら、早速接続テストです。

ssh -T git@github.com # サービスによって異なります。 e.g. git@bitbucket.org

次のように「fingerprint」が正しいか尋ねられます。

The authenticity of host 'github.com (XXX.XXX.XXX.XXX)' can't be established.
ED25519 key fingerprint is SHA256:*******************************************.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? 

この場合は、GitHubのSSH and GPG keysページを開いて、fingerprintが一致するか確認してください。

正しくなくても「yes」で接続できることがあるようです(調査中)

正しければyesと入力してEnterキーを押下します。
接続に成功すると、次のようなテキストが表示されます。

Hi あなたの名前! You've successfully authenticated, but GitHub does not provide shell access.

あともう一息!
ここで接続成功のテキストが表示されない場合場合、何かを間違えています。
先に進まずに最初から手順を確認してください。

6. クローンしてみよう

お好きなGitクライアントでリポジトリをSSHでクローンしてみよう!

普段GUIを使っている!という方へ
GUIでのSSHクローンは、各種GUIのドキュメントを参照してください。
以上でSSH接続でのクローン準備はおしまいです。おつかれさまでした!

ローカルリポジトリを置きたいディレクトリにシェルで移動して、GitHubの好きなリポジトリのSSHパスをコピーしてきます。
heppokofrontend/heppokofrontendのリポジトリをSSHクローンしてくる例を見てみましょう。

cd ~
git clone git@github.com:heppokofrontend/heppokofrontend.git   # 注意:自分のリポジトリでなければ`git push`できない
cd heppokofrontend
ls                                                             # リポジトリの中身が確認できます

URLにご注意
間違えて「http」で始まるURLでクローンしてしまうと、これまでの工程の意味がなくなってしまいます。
必ずSSHのパスを使ってクローンしましょう。

パスワードを聞かれた場合は、入力してからEnterキーを押すと無事にSSH接続でクローンが始まります。
ローカルリポジトリが落ちてきているはずなので、あとは自由に開発しましょう!

おつかれさまでした!🥳🥒

SSH接続を使うサービスはほとんど同じやり方!
SSH Keysを使うGitHubのようなサービスは、基本的に公開鍵を登録するためのメニューがどこかにあります。
SSH Keysを発行したら、まずは公開鍵をサービスに渡します。
あとは「3. おまじないをしておこう」の章で行った、どのドメインにはどの秘密鍵を使うかの記述を~/.ssh/configに追記してあげればSSH接続が利用できます。

~/.ssh/config
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/github_rsa
  1. macOSはデフォルトでvimが使える

  2. UserKeychainはmacOS向けの記述で、何度もパスワードの入力をしなくてもよくなる方法です。

  3. これはPort 22を使わない方法です。通常はHostNameは「github.com」Portは省略(デフォルトで22)します。

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4