流れ
- SSH鍵生成
- GitHubにSSHを登録
- Git設定
- SSH接続
- git firstcommitまで
SSHとは
SSHとは、Secure Shell(セキュアシェル)の略称で、リモートコンピュータと通信するためのプロトコルです。認証部分を含めネットワーク上の通信がすべて暗号化されるため安全に通信することができます。
つまり、安全安心にサーバにログインするための仕組みです。
今回は、SSH接続に公開鍵認証方式を使用します。
公開鍵認証とは
SSHでのユーザー認証に公開鍵認証を使用すると、原理上は秘密鍵を持っているクライアントしかログインできなくなるためセキュリティを高めることができます。
SSH鍵の生成
ssh-keygenしましょう。
今回は、2022年時点で暗号化方式で最強と言われているEd25519(エドワーズ曲線デジタル署名アルゴリズム)を使って生成します。
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519
ssh-keygenコマンドのオプション
-t [type] : 生成する鍵のタイプを指定できる
-f [output_keyfile] : 出力先ファイルを指定できる
-N [new_passphrase] : パスフレーズを指定。後からでも付けられるが最初に設定しよう(必須!)
-C [comment] : コメントは識別用の文字列で慣習的にemailを指定する(このオプションは使わなくても良い)
$ ssh-keygen -l -f ~/.ssh/id_ed25519.pub
# 今回の例では、「固定キー長:256bit」かつ、暗号化方式「Ed25519」が返ってくればOK
無事に秘密鍵(~/.ssh/id_ed25519)、公開鍵(~/.ssh/id_ed25519.pub)が生成された。
秘密鍵(id_ed25519)
・・秘密鍵は利用者本人以外に漏らしてはダメ
公開鍵(id_ed25519.pub)
・・公開鍵は他の人に渡ってもよい(むしろ公開する)
GitHubにSSH鍵(公開鍵)を登録する
(1) 公開鍵(id_ed25519.pub)をコピーする
$ pbcopy < ~/.ssh/id_ed25519.pub
(2) Githubにログインし、公開鍵を登録する
アカウントのアイコン > [Settings] > [SSH and GPG keys]と辿り、[New SSH key]を押下。
先程コピーした値をSSHkeyとして登録する。
※認証キーは、「Authentication」を選択
(3) Githubリポジトリ未作成の場合
Githubで「CreateRepository」ボタンを押してアプリのリポジトリを作成しましょう
git/configの設定(macOS)
アプリケーションのディレクトリに移動し、以下のファイルにremote originを設定します
[remote "origin"]
url = git@github.com:[GithubUserName]/[RepositoryName].git
・[GithubUserName]・・・push先のユーザ名を指定
・[RepositoryName]・・・リポジトリ名(アプリ名)を指定
作成したGitHubリポジトリからSSH用のurlをコピーして、上記に貼り付けましょう
ssh/configの設定
以下のファイルにユーザを設定する。
# 複数の接続先を登録してみる
# 接続先1
Host github.com # 接続ホスト名(自由に決めてOK)
HostName github.com # リモート先、サーバのホスト名やIPアドレス
User git # リモート先、サーバのユーザー名
Port 22 # SSHのポート番号
IdentityFile ~/.ssh/id_rsa # 秘密鍵の絶対パス
TCPKeepAlive yes # 接続の有効無効の確認通知を出すかどうか(yes/no)
IdentitiesOnly yes # IdentityFileで指定した秘密鍵に限定するかどうか(yes/no)
# 接続先2 (サブユーザ)
Host github.com_sub
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/[サブユーザ用フォルダ]/id_rsa # ユーザ毎にフォルダを作って整理すると良き
TCPKeepAlive yes
IdentitiesOnly yes
SSHの接続確認(ローカル環境 ⇄ SSH接続 ⇄ Github)
- ターミナル上で以下のコマンドを実行し接続テストする
$ ssh -T git@github.com
Enter passphrase for key '/Users/username/.ssh/GithubUser/id_rsa':
Enter passphrase for key '/Users/username/.ssh/GithubUser/id_rsa':
Hi GithubUser! You've successfully authenticated, but GitHub does not provide shell access.
→最後の行のメッセージが表示されれば接続成功!
- エラーが発生した場合は、デバックモードで詳細を確認する
$ ssh -vT git@github.com
# どこのSSH設定ファイルを読み込んでいるか?
debug1: Reading configuration data /Users/username/.ssh/config
debug1: Reading configuration data /Users/username/ssh_config
# 〜中略〜
# 公開鍵の追加先はどこか?
debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /Users/username/.ssh/known_hosts:1
# 〜中略〜
# どこの秘密鍵を読み込んでいるか?
debug1: Trying private key: /Users/username/.ssh/id_dsa
debug1: Trying private key: /Users/username/.ssh/id_ecdsa
gitの設定〜GitHubにpushするまで
git ユーザーを確認する
現在のgitのユーザ名、メールアドレスが適切か確認します。
$ git config user.name #ユーザ名の確認
$ git config user.email #メールアドレスの確認
リモートリポジトリへのプッシュ
以下は、ローカル環境でカレントリポジトリに変更を追加してコミットした後、GitHubのリモートリポジトリに変更をプッシュする手順です。
# リモートリポジトリのトラッキングを追加する
git remote add origin git@github.com:GithubUserName/YourRepositoryName.git
# 追加したトラッキングが正しく反映されているかを確認する
git remote -v
# もし誤ったトラッキングが設定されていた場合は、トラッキングを削除する
git remote rm origin
# ローカルのmasterブランチを、GitHubのremote originのmasterブランチにプッシュする
git push -u origin master
# 備考
# 上記のpushコマンドは初回実行以降、git pushのみで使用できます