概要
GitでHTTPS通信をしていると
よくGitHubのユーザ名とパスワードを聞かれて
SSHで対応しようとしたら
ハマったので備忘録の為にも書き込んでおこうと思いました。
※2018/10/14追記
疎通確認を忘れていたのと
デバッグの疎通確認も知ったので追記します。
使用環境
Windows10
Git version 2.16.2.windows.1
悩んだ点
まずSSHKeyの生成方法を理解していなかった
なのでGitのssh-keygenの実行ファイルの場所が分からない
勝手にWindowsがBOM付けるから面倒ごとが増えた
では、ハマってしまった経験を生かして
次にやっても難なくできるように手順を書き込んでおきます
事前準備
WindowsにGitをインストールしておいてください。
参考になるページを見つけたので載せておきます。
自分用 Git For Windowsのインストール手順
SSHKeyを生成
いつのバージョンか知らないのですが
SSHKeyがホームディレクトリで生成できたような記事を見つけましたが
自分の環境では通らなかったので
C:\Program Files\Git\usr\bin
にssh-keygenの実行ファイルがある前提で話をします。
PS C:\Users\[ユーザ名]> cd 'C:\Program Files\Git\usr\bin\'
PS C:\Program Files\Git\usr\bin> .\ssh-keygen -t rsa -b 4096 -f "~/.ssh/id_rsa" -N ""
Generating public/private rsa key pair.
Your identification has been saved in [ユーザディレクトリ]/.ssh/id_rsa.
Your public key has been saved in [ユーザディレクトリ]/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:[略] [デフォルトコメント]
The key's randomart image is:
+--[ RSA 4096]----+
| 略 |
+-----------------+
2018/6/17更新
鍵の長さがデフォルト鍵長の2048bitで生成していたため
-b 4096
を追記しました。
2019/1/10更新
ファイル名の指定を追加しました。
2019/08/30更新
ワンライナーに対応しました。
-C
オプションを削除しました。
理由として必須ではないからです。
-N
オプションを追記しました。
パスフレーズの入力をカットします。
[メールアドレス]
はGitで使うメールアドレスを指定してください
恐らくpush先で使うからだと思うのですが
知っている方いたらコメントいただけたらと思います。
追記いたしますので。
サイトによってはただのコメントであったり
push先(で使っている)のメールアドレスだったりとか
バラバラなので...
上記は以前書いていたものですが
-C
オプションはデフォルトでユーザ名を入れるようです。
私は問題ないのですがよく見かける例で行くと
メールアドレスを指定するようなので
-C "[メールアドレス]"
と追記してください。
-f [ファイル名]
は
デフォルトの公開鍵でいうid_rsa.pub
のid_rsa
の部分です。
正確にはそれまでのファイルパスも含みます。
相対パスであればユーザディレクトリに続くパスから指定します。
ちなみに省略可能です。
省略するとどこに鍵を保存するか聞かれます。
そのままEnterを押下すると上記の例でのパスで保存されます。
パスフレーズですが
上記例では-N
オプションで入力していません。
入力する場合は引数に指定するか
-N
オプションを削除し対話式での入力を行ってください。
そうするとSSHKeyのイメージ(?)が表示されますので
これで生成はできました!
GitHubに公開鍵を預ける
預けることができればSSH通信ができるようになります!
そこでも詰まった私ですが...
まずホームディレクトリに戻ってもらいます。
PS C:\Program Files\Git\usr\bin> cd ~
そして生成されたSSHKeyの場所まで行きます
PS C:\Users\[ユーザ名]> cd .\.ssh\
次は生成された公開鍵をクリップボードにコピーします
PS C:\Users\[ユーザ名]\.ssh> cat .\id_rsa.pub
catでGet-Contentが呼ばれるはずですが
使えないようでしたらcatをGet-Content
に置き換えてください。
表示された文をコピーしてください。
※ちなみにワンライナー
PowerShell:WindowsPowerShell
PS C:\Users\[ユーザ名]\.ssh> cat ~\.ssh\id_rsa.pub
そして次はGitHubに移ります
SSH and GPG keys
恐らくここから飛べるのではないかなと思います。
そこのNew SSH Keyボタンを押下してください
次にタイトル(機種名が判別しやすいと思います)と
公開鍵のファイルの内容を入力します。
先ほどテキストエディタに張り付けてコピーし直してもらったものです
ちなみにBOM入りだと
という風に怒られました
この厳格さのおかげで秘密鍵を登録してしまうのも防げるとか...
あとはAdd SSH Keyを押下するだけです!
その後は自由にpushするなりpullするなりどうぞ!
疎通確認
最初に書いたときには疎通確認を忘れていました。
確認もせずに何をしているのか・・・
ということで確認します。
PS C:\Users\[ユーザ名]\.ssh> ssh -T git@github.com
これだけですね。
実行するとこんな感じの文が出ると思います。
The authenticity of host 'github.com (IPアドレス)' can't be established.
ECDSA key fingerprint is SHA256:[略].
Are you sure you want to continue connecting (yes/no)?
yesと入力してください。
Warning: Permanently added 'github.com,IPアドレス' (ECDSA) to the list of known hosts.
Welcome to GitHub, [ユーザ名]!
完了です。
お疲れさまでした。
参考にしたページ
WindowsでSSHの鍵を作る
SSHの公開鍵を作成しGithubに登録する手順
2018/6/17更新時
お前らのSSH Keysの作り方は間違っている
2019/08/30更新時
ssh-keygenをパスフレーズの確認なしで作成する