SSHキーを作成してGitHubに登録する

# SSHキーを作成してGitHubに登録する

**[【ぜんぶポータブル】ポータル](https://qiita.com/jtFuruhata/items/f9788da8e480c646a2a9)**

**最終更新:2023年1月20日** PowerShellコマンド追加 sshのconfigのパス解釈は保留

このドキュメントは、

```
自分のSSHキーをGitHubに登録してください。
```

って言われてもさっぱりわからねぇよ、という方向けです。

このドキュメントでは、SSHキーペアの作成からコマンド入力によるGitHubプライベートリポジトリのクローンまでを、ステップバイステップで説明します。

「SSHってなんだ！？」という方は、[様々な良いページがあると思います](https://www.google.com/search?q=SSH+セキュアシェル)けれど、作業を進めるだけなら特に気にしなくてもOKです。

## 前準備
- GitHubに適当なプライベートリポジトリを作成して初期化してください。
**「…？」**という方は、
[GitHubプライベートリポジトリの作成手順](https://qiita.com/jtFuruhata/items/0f28ebe5828005eae9b7)
に従って準備してください。
- [【ぜんぶポータブル】](https://qiita.com/jtFuruhata/items/f9788da8e480c646a2a9)環境の方は、ポータブル環境フォルダの`Console_○○○`を開くか、VSCode上の統合ターミナルから操作してください。　**注：現在公開準備中です**
- それ以外の環境の方は、[各プラットフォーム版Gitをインストール](https://git-scm.com/)し、Windowsはコマンドプロンプト（`Windows`キー+`R`キー、「名前」欄に`cmd`と入力して`Enter`キー）、Macはターミナル（Finderを開いて「移動」メニューから「ユーティリティ」→「ターミナル」）、Linux系は何らかのコマンドコンソール（例えば「ラズベリーボタン」→「アクセサリ」→「LXTerminal」）を開いておいてください。

<!--
    - **Windows** ... [Git for Windows](https://git-scm.com/download/win)をインストールしてからコマンドプロンプトを開き、`start-ssh-agent`と入力して`Enter`キーを押してください。`Starting ssh-agent: done`または`Found ssh-agent`みたいに表示されていればOKです。
    - **Mac/Linux** ... [Mac版Git](https://git-scm.com/download/mac)または[Linux版Git](https://git-scm.com/download/linux)をインストールしてからターミナルを開き、`ps -A | grep ssh-agent`と入力して`Enter`キーを押してください。そこに`ssh-agent`が表示されていれば大丈夫です。表示されていない場合は`ssh-agent`と-->

## SSH系の下準備
以下のコマンドを叩いてください。

```:コマンド（全プラットフォーム共通）
ssh -T git@github.com
```

以下の様なメッセージが出てきたら、明確に`yes`と入力して`Enter`キーを押してください。

```:出力結果
The authenticity of host 'github.com (192.30.255.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?
```

最終的にはエラーが出て終わりですが、下準備としてはOKです。

```:出力結果
The authenticity of host 'github.com (192.30.255.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.255.113' (RSA) to the list of known hosts.
git@github.com: Permission denied (publickey).
```

自動的に`.ssh`フォルダが作成されていると思いますので、そこに移動しておきます。

```:コマンド（全プラットフォーム共通）
cd .ssh
```

`No such file or directory`と怒られたら（Macのポータブル環境とか）、
`mkdir .ssh`を叩いてから`cd .ssh`してください。

## SSHキーの作成
SSHで使用する公開鍵と秘密鍵のキーペアを作成します。
このうち秘密鍵（生成されたキーファイルのうち.pubの付いていない方）は大変大事なファイルですので流出しないように注意してください。
既に持っている方も、ポータブル環境で利用する方はデバイス紛失のリスクに備え、専用キーペアの使用を強くお勧めします。

下記のコマンド中、`-C`右の`" "`の中身は、**自分の電子メールアドレス**を入力してください。
また、コマンド一番右側`rsa_GitHub`の部分は、好きな名前で結構です。
ただし、**空白を含んだり全角文字を含んだりすると大抵痛い目にあいます**ので、ファイル名は必ず半角文字＆有効な記号で指定してください。

```:コマンド（全プラットフォーム共通）
ssh-keygen -t rsa -b 4096 -C "myname@my.email.ad.jp" -f rsa_GitHub
```

すると、以下の様なメッセージが出ますので、このキーに設定するパスフレーズ（いわゆるパスワードです）を入力してください。
ちなみに、**画面上に入力した文字は表示されません**がちゃんと入力されています。

```:出力結果
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
```

入力して`Enter`キーを押すと、もう一度聞かれますので、**同じ**パスフレーズを入力します。

```:出力結果
Enter same passphrase again:
```

間違えたら再入力を要求されますので、何とかしてください。

```:出力結果
Your identification has been saved in rsa_GitHub.
Your public key has been saved in rsa_GitHub.
The key fingerprint is:
SHA256:～～～～～～ myname@my.email.ad.jp
The key's randomart image is:
+---[RSA 4096]----+
|  ステキなアート  |
+----[SHA256]-----+
```

こんな感じで表示されればOKです。

この公開鍵ファイルの中身をあとでGitHubのサイトへ貼り付けますので、クリップボードにコピーしておきます。

```:Windows：コマンドプロンプト
clip < rsa_GitHub.pub
```

```:Windows：PowerShell
Get-Content rsa_GitHub.pub | Set-Clipboard
```

```:Mac：ターミナル
pbcopy < rsa_GitHub.pub
```

```:Linux：シェル
xsel -bi < rsa_GitHub.pub
```

（Linuxの`xsel`で怒られた方は`sudo apt install xsel`とかなんとかしてください）

## SSH公開鍵をGitHubに登録する
[GitHub](https://github.com/)にアクセスします。
![2019-02-21-15-04-09.png](https://qiita-image-store.s3.amazonaws.com/0/151581/121eade1-ccdf-6867-9800-411b0e2a46fd.png)
一番右上から2番目`Sign in`をクリックします。
![2019-02-21-15-43-16.png](https://qiita-image-store.s3.amazonaws.com/0/151581/d9af73c8-5632-aceb-b0af-e98ea4b92196.png)
ユーザ名とパスワードを入力して`Sign in`をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/151581/cda5e44e-52a1-20a1-4d64-390c1d227d09.png)
画面右上のGravatarをクリックしてメニューを開き、`Settings`を選択します。
![2019-02-18-13-58-28.png](https://qiita-image-store.s3.amazonaws.com/0/151581/cb3b2515-92bf-d7f6-5b5a-078e29b62c90.png)
サイドバーの`SSH and GPG Keys`を選択して、右上の方の`New SSH key`ボタンを押して、
![2019-02-18-14-02-23.png](https://qiita-image-store.s3.amazonaws.com/0/151581/74883c60-0abe-6dd8-43b5-624e0d7bc989.png)
`Title`には、複数のキーを登録した時に自分で区別が付けられるような名前を入力し、`Key`欄をクリックして選択してから`Ctrl`+`V`（Macは`Command`+`V`）で貼り付け、`Add SSH key`ボタンを押します。
![2019-02-18-14-04-25.png](https://qiita-image-store.s3.amazonaws.com/0/151581/ef6a42ae-1b2e-d823-ebfa-e6db4a398c75.png)
パスワードを聞かれたら（鍵生成時に入力したパスフレーズではなく）GitHubアカウントのパスワードを入力して`Confirm password`ボタンを押して完了です。
![2019-02-18-14-07-12.png](https://qiita-image-store.s3.amazonaws.com/0/151581/513c2a30-e5f1-235f-5b46-4e6a86f505e2.png)
これでGitHubにSSH接続するためのキーを登録することが出来ました。[^キー削除]

[^キー削除]: あ、もちろん、公開鍵だけあっても仕方がないとは言え気持ち悪いんで、このキーペアは速攻破棄しました。

## SSHのアクセスチェック
```:コマンド（全プラットフォーム共通）
ssh -T git@github.com -i rsa_GitHub
```

もしも以下の様なメッセージが出たら、明確に`yes`と答えて`Enter`キーです。
下準備したので大抵出ないはず。

```:出力結果
The authenticity of host 'github.com (192.30.255.112)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?
（Enterキーではなく、「yes」としっかり入力する）
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.
```

以下の様にパスフレーズを要求されますので、（鍵生成時に入力したものを）入力して`Enter`キーです。例によって入力しても画面には表示されません。

```:出力結果
Enter passphrase for key 'rsa_GitHub':
```

間違って居たら再度聞かれます。正しいパスフレーズを入力すると、

```:出力結果
Hi jtana! You've successfully authenticated, but GitHub does not provide shell access.
```

みたいに、`You've successfully authenticated`って言われたら、ここまでの手順はOKです。

## Gitの設定をする
GitHubでは、コミット（ファイルの登録）にサインオフ（署名）することが推奨されています。
そのためのユーザ名とパスワードを設定します。
**もちろん`" "`の中身は自分のものに変更して入力**します。
また、Git内部でも前の手順で試したSSHコマンドを使うようにします。[^gitconfig]

```bash:コマンド（全プラットフォーム共通）
git config --global user.name "Taro Yamada"

git config --global user.email "myname@my.email.ad.jp"

git config --global core.sshCommand "ssh -T -i ~/.ssh/rsa_GitHub"
```

エラーも何も表示されなければ成功です。
ホームディレクトリに`.gitconfig`ファイルが自動的に作成されます。
パスの指定はWindowsでもこれで合ってます。

[^gitconfig]: 複雑な使い方をする方は`.gitconfig`ではなく`~/.ssh/config`で設定する方がいいかもしれません。

## 試しにクローンする
とりあえずホームディレクトリに戻ります。もしくは、お好みのフォルダに`cd`してください。

``` bash:コマンド（全プラットフォーム共通）
cd ..
```

では実際にGitHubプライベートリポジトリにあるファイルを持ってきましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/151581/084ab7e8-77f4-e762-9143-330d779ec92e.png)
[GitHubプライベートリポジトリの作成手順](https://qiita.com/jtFuruhata/items/0f28ebe5828005eae9b7)最終盤の手順を参考に、
`Clone with SSH`に表示されたアドレスを、
「クリップボードに左矢印」ボタンを押してクリップボードにコピーします。

以下のコマンド入力の末尾、`git clone `以降は、`Ctrl`+`V`（Macは`Command`+`V`）で貼り付けます。
下の通り打っても僕のプライベートリポジトリですのでアクセスできません…

```bash:コマンド（全プラットフォーム共通）
git clone git@github.com:jtana/sandbox.git #最後の部分はペーストね
```

パスフレーズを聞かれますので入力します。

```:出力結果
Cloning into 'sandbox'...
Enter passphrase for key '～～～～/.ssh/rsa_GitHub':
```

`done.``done.`言われたらOKです。

```:出力結果
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 13 (delta 2), reused 10 (delta 2), pack-reused 0
Receiving objects: 100% (13/13), done.
Resolving deltas: 100% (2/2), done.
```

これで、ホームディレクトリにリポジトリと同じ名前のフォルダが作成され、中にファイルが入っているはずです。実際にファイルを持ってこれたかどうか、WindowsエクスプローラーなりMacのFinderなりLinuxのファイルマネージャーなりで確認し、不要であればこのフォルダを削除してください。

以上です、お疲れ様でした。