Windows10において、Git Bashを使用してSSHキーをローカルに作成して、SSHキーをssh-agentに登録する。
SSHキーをローカルに作成
SSHキーが~/.ssh/ id_ed25519とSSHキーが~/.ssh/ id_ed25519.pubに作成される。
id_ed25519は秘密鍵である。
id_ed25519.pubは公開鍵である。
$ ssh-keygen -t ed25519 -C "<email>"
SSHエージェントの環境変数を現在のシェルに設定する。
eval “$(ssh-agent -s)” コマンドは、ssh-agent -s コマンドの実行結果をシェルに評価させることで、環境変数の設定を行うための仕組みである。
正確には、eval “$(ssh-agent -s)” コマンドは SSH エージェントの環境変数を現在のシェルに設定するためのコマンドである。具体的には、ssh-agent -s コマンドを実行し、その結果を evalコマンドに渡して評価する。「evalコマンドは評価を行う」という言い方が良く分からない。環境変数に設定していることは分かる。このときに設定する環境変数はシステムの詳細設定から出す環境変数とは別物である。
$ eval "$(ssh-agent -s)"
eval “$(ssh-agent -s)” コマンドの実行して環境変数が設定されたことを確認するのは次のコマンドを実行する。
$ echo $SSH_AUTH_SOCK
/tmp/ssh-○○/agent.1463
~/.ssh/configファイルを作る。
configファイルの中は次の通り。文字コードはUTF-8にする。
UseKeychainオプションは、macOSのGit クライアントで使用されるオプションである。
このオプションは、ssh-agentがキーチェーンから自動的にSSH秘密鍵を読み込むようにする。
具体的には、UseKeychainオプションが有効になっている場合、GitクライアントはmacOSのキーチェーンに保存されたSSH秘密鍵を自動的に取得し、ssh-agentに追加する。
これにより、パスフレーズを再入力することなく、SSH接続時に自動的に秘密鍵を使用することができる。
ただし、UseKeychainオプションはmacOSでのみサポートされており、Windows10のGit Bash環境では無効である。このためUseKeychainをコメントアウトしておく。
Host *
AddKeysToAgent yes
# UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
SSHキーをssh-agentに登録する。
SSH キーが登録されると、ssh-agentはそのキーを保持し、他のSSH関連の操作(例えばSSH接続やリモートリポジトリへのアクセス)でそのキーを使用します。
$ sh-add ~/.ssh/id_ed25519
SSHキーをGitHubに登録
公開鍵を出力する。
$ cat ~/.ssh/id_ed25519.pub|clip
公開鍵をクリップボードにコピー
GitHub上でSettings -> SSH and GPG keys -> New SSH key ->公開鍵をペースト
Key typeは「Authentication Key」を選ぶ。
GitHubとのSSH接続をテスト
SSHを介してGitHubに接続し、GitHubとの接続が確立されているかを確認する。また、SSH接続が正常に機能するかどうかを確認するのにも使用される。
$ ssh -T git@github.com
Hi 〇〇! You've successfully authenticated, but GitHub does not provide shell access.
「GitHub does not provide shell access」というメッセージは、GitHubにSSHで接続してもシェルアクセスが提供されないことを意味する(SSHでGitHubに接続しても直接的なシェルアクセスは提供されない)。これは、GitHubがSSH接続を通じてコマンドラインシェルを提供していないことを示している。
git bashなどのGitクライアントは、GitHubのリポジトリに対してGitコマンドを実行するためのインターフェースを提供する。Gitクライアントを使用することで、リモートリポジトリの操作、コミットのプッシュ、ブランチの作成などのGit関連の操作を行うことができる。