個人学習メモ。
1.SSHについて
1-1.SSHとは
- ネットワーク上のコンピュータを遠隔操作するためのプロトコル
- パスワード情報含めて通信をすべて暗号化する
- 「Secure Shell」の略
- ポート22を使用する
SSHというプロトコルでGitHub~Git間通信を暗号化して安全にファイルをやり取りしましょう、ということ。
1-2.SSHの認証方式
SSHは「公開鍵認証方式」という方法で通信を暗号化する。
公開鍵認証方式は「公開鍵」「秘密鍵」の2種類の鍵を使って安全に情報をやり取りする方式のこと。
(この2種類の鍵をキーペアと言ったりする)
以下の流れでクライアントとサーバがやり取りをし、認証を行う。
- クライアントが公開鍵と秘密鍵を作成する
- クライアントが公開鍵をサーバに渡す
- クライアントがサーバに認証を要求する
- サーバは公開鍵で暗号文を作成し、クライアントに送る
- クライアントは秘密鍵で暗号文を復号し、その結果をサーバに送る
- サーバはクライアントから送られた復号結果を確認する
- 復号結果が正しければ、正規のユーザーとして認証される
2.SSH公開鍵・秘密鍵生成
Git Bashでssh-keygen
コマンドを実行する。対話形式で公開鍵・秘密鍵(キーペア)が生成される。
※ssh-keygen
コマンドの各種オプションについて触れないので各自調べてほしい。
デフォルトで作成されるキーペアはrsa。
ssh-keygen
Enter file in which to save the key (/e/home/.ssh/id_rsa):
で鍵を格納するディレクトリを聞かれている。そのままEnterすると.ssh/
が作成される。
Enter passphrase (empty for no passphrase):
でパスフレーズを入力せよと言われる。パスフレーズは自分でパスワードを考えて入力する。後でこのパスフレーズは使うので忘れないようにする。
パスフレーズは二回入力する。
~/.ssh
ディレクトリ内にキーペアid_rsa
とis_rsa.pub
が存在することが確認できる。
.pub
がついている方が公開鍵(public key)である。
3.GitHubに公開鍵を登録する
公開鍵の中の文字列をコピーしてGitHubに登録する。
cat id_rsa_qiitatest.pub
で中身を見るとこんな感じの文字列が書かれている。
これをコピーしてもいいが、以下コマンドでクリップボードにコピーできる。
clip < id_rsa_qiitatest.pub
ブラウザでGitHubにログインする。
[Settings]-[SSH and GPG keys]
SSH keysの[New SSH key]をクリックする。
Titleに適当な名前を付けKeyに公開鍵を貼り付けて[Add SSH key]をクリックする。
4.ローカルGit側の秘密鍵設定ファイル作成
ここから自分のPC側Gitの設定を行う。
4-1.configファイルの作成
Git Bashで.ssh直下にconfigファイルを作る。
touch config
#config作成
chmod 600 config
#権限設定
configファイルを編集する。今回はvimで編集する。
vim config
ファイルを開いた後、i
で編集モードに入り以下情報を追加する。
# Githubの設定
### Qiitaテスト用
# - - - - - - - - - - - -
Host github.com
User git
Port 22
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_qiitatest #秘密鍵のパスを入力
TCPKeepAlive yes #ここは好み
IdentitiesOnly yes #ここは好み
ファイルへの追記が終わったらesc
で編集モードを抜け、:wq
Enterで保存して終了する。
4-2.SSH Agentの設定
パスフレーズの入力をいちいちしなくてもいいように、SSH Agentの設定をする。
Git Bashでssh-agentを起動する。
ssh-agent bash
ssh-agentに生成した秘密鍵を登録する。
パスフレーズが求められるので、SSHキーペア生成時に入力したパスフレーズを入力する。
ssh-add ~/.ssh/id_rsa_qiitatest
以下コマンドで登録できたか確認する。
ssh-add -l
鍵の情報が表示されていればOK。
5.GitHubにSSH接続できるか確認する
以下コマンドを実行する。
ssh -T git@github.com
Hi emi-ki! You've successfully authenticated, but GitHub does not provide shell access.
とメッセージが表示されればOK。SSH接続できた。
初回接続時は以下のようなメッセージが出る場合があるが、yes
ですすめる。
The authenticity of host 'github.com (13.114.40.48)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
これでSSH認証が通っているので、リモートリポジトリとファイルのやり取りができる。
ディレクトリ内の不要なテキストファイルを削除したり追加したりしてadd、コミットし、pushすると無事リモートリポジトリ(GitHub)と通信できていることが確認できる。
余談
キーペアはTeraTermのGUIで作る方法もある。これが一番簡単かもしれない。
だがしかしエンジニアたるものコマンドで実施したいのが心情。
参考
Windows10でGitHubを始める~⓪Gitの概念とインストールソフトの種類
Windows10でGitHubを始める~①Gitインストール
Windows10でGitHubを始める~①'おまけGitホームディレクトリ変更
Windows10でGitHubを始める~②GitHubアカウント作成
Windows10でGitHubを始める~③GitHubでのメールアドレス設定とGitクライアントでのユーザ名・メールアドレス設定
Windows10でGitHubを始める~③'おまけユーザ名・メールアドレス設定について詳細
Windows10でGitHubを始める~④リモートリポジトリの作成(GitHub)
Windows10でGitHubを始める~⑤Githubにプッシュする
Windows10でGitHubを始める~⑥-0.Git~GitHub間の認証について
Windows10でGitHubを始める~⑥-1.Git操作時のGitHub認証HTTPS(Git Credential Manager)
Windows10でGitHubを始める~⑥-2.Git操作時のGitHub認証HTTPS(Personal access token)
Windows10でGitHubを始める~⑥-3.Git操作時のGitHub認証SSH編
Windows10でGitHubを始める~⑦GitHubへのPullRequest