git pushの際のsshキー省略したいですか？[githubにsshで接続し，パスフレーズを省略する方法]

みなさんGitHubへの連携にSSHを使用していますか？Gitを使用してGitHubなどのリモートリポジトリと連携する際，SSH鍵を利用することで安全かつ便利に操作を行うことができる．しかし，SSH鍵にパスフレーズを設定している場合，Git操作のたびにパスフレーズの入力を求められることがあり，**これがめんどい!**
git pushをする際にSSHで接続すると以下のようにGithubに接続するたびにパスフレーズが聞かれる．
```bash
git push 
 - Enter passphrase for key '/Users/[user_name]/.ssh/id_rsa':
```

本記事では，SSHのパスフレーズ入力を省略する方法について詳しく解説する．

> GitHubにSSHキーを登録する手順も先に紹介します

gitコマンドやghコマンドに関しては以下の記事から

https://qiita.com/JavaLangRuntimeException/items/6b46551f56e0def76eba

:::note info
**SSH（Secure Shell）とは**
ネットワーク上で安全に通信を行うためのプロトコルであり，Gitではリモートリポジトリとの通信に広く利用されている．SSH鍵は公開鍵認証方式を採用しており，パスフレーズを設定することで鍵のセキュリティを強化できる．しかし，パスフレーズを設定すると，SSH接続のたびに入力が必要となり，開発作業の効率を低下させる要因となる．
:::

# GitHubにSSH接続をする方法
## SSH鍵の生成
新たにSSH鍵を生成する場合は，以下の手順に従う．
> 既にSSH鍵を持っている場合は，このステップをスキップして構わない．

SSHキーは~/.sshに保管する．そのため.sshへ移動をする
```bash
cd ~/.ssh
```
SSHキーを作成する．
```bash
ssh-keygen -t rsa
```

3. コマンド実行後，鍵の保存場所を尋ねられる．デフォルトの場所（`/Users/[user_name]/.ssh/id_rsa`）を使用する場合は，そのままEnterを押す．その後パスフレーズの設定を求められる．

```bash
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```

## Githubに公開鍵を登録
Githubを開き，自分のアイコンを選択し，「Settings」を選択する．
![スクリーンショット 2024-12-13 10.08.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/d7e61434-d326-7414-0e79-4a62c0582820.png)


「SSH and GPG keys」を選択する
![スクリーンショット 2024-12-13 10.09.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/fb4f8836-ea60-2acc-2f40-b88580cb4fd2.png)

その後「New SSH Key」を選択し，公開鍵を入力する．
入力する公開鍵は以下のコマンドで取得できる
```bash
cat ~/.ssh/id_rsa.pub
```

githubへの接続テストを以下のコマンドで実行する
```bash
ssh -T git@github.com
```
このように出ればOK!
```bash
Hi (account名)! You've successfully authenticated, but GitHub does not provide shell access.
```

# SSHキーを省略する設定

`ssh-agent`は，SSH鍵をメモリ上に保持し，必要に応じて自動的に鍵を使用して認証を行うサービスである．これを活用することで，Git操作時のパスフレーズ入力を省略できる．

## 1. ssh-agentの起動
ここからは`ssh-agent`を使用します．多くのシステムでは，`ssh-agent`は自動的に起動するが，起動していない場合は以下のコマンドで手動で起動できる．
```bash
eval "$(ssh-agent -s)"
```
    
このコマンドは，`ssh-agent`をバックグラウンドで実行し，環境変数を設定する．

## 2. SSH鍵をssh-agentに追加

生成したSSH鍵を`ssh-agent`に追加するため，以下のコマンドを実行する．
`id_rsa` は生成したsshキーの名前にすること．
```bash
ssh-add ~/.ssh/id_rsa
```

実行後，パスフレーズの入力が求められる．正しく入力すると，鍵が`ssh-agent`に追加される．

以下のコマンドを実行して登録されていることが確認できればOK
```bash
ssh-add -l
```

Macを使用している場合，`~/.ssh/config`ファイルを編集し，SSH鍵のパスフレーズをKeychainに保存する設定を行うとパスフレーズ入力の省略ができる．

- `~/.ssh/config`ファイルを開く（存在しない場合は作成する）．
vimの場合
```bash
vim ~/.ssh/config
```
> もちろんVSCodeやほかIDEでも編集しても大丈夫です！

- 以下の設定を追加する．
`id_rsa` は生成したsshキーの名前にすること．
```~/.ssh/config
Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa
```   
> IdentityFileに作成された秘密鍵のファイル名を登録(.pubとついていないSSHキー)

- ファイルを保存して閉じる（vimの場合)
**escキーを押した後に:wqでエンター**
    
この状態でgit pushを行うと，パスフレーズの入力を求められずに操作が完了する．
```bash
git push
- Everything up-to-date
```

git clone も同様に省略できているはず
```bash
git clone git@github.com:your_username/your_repository.git
```

パスフレーズの入力を省略でき，クローンが正常に行われる．


# 注意点

- **セキュリティの確保**: SSH鍵は非常に重要な認証情報であるため，適切に管理することが重要．特に，パスフレーズを省略する場合は，デバイスのセキュリティを確保する必要がある．
- **鍵のバックアップ**: SSH鍵を紛失した場合，リポジトリへのアクセスができなくなるため，鍵のバックアップを推奨する．
- **不要な鍵の削除**: 使用しなくなったSSH鍵は，`ssh-agent`から削除し，GitHubの設定からも削除すること．


GitでSSHを使用する際，毎回パスフレーズを入力するのは煩わしい．本記事では，`ssh-agent`と`ssh-add`を活用し，さらにGitHubにSSH鍵を登録することで，パスフレーズ入力を省略しつつ安全な開発環境を構築する方法を解説した．特にMacユーザーは，Keychainを利用することで利便性を大幅に向上させることができる．セキュリティと利便性のバランスを考慮し，適切な設定を行うことが重要である．

それではQiitaアドカレ.24企画の今日のクリスマスツリーです．

> 詳しくは[こちら](https://qiita.com/JavaLangRuntimeException/items/1f4a6febf957f522ba45)の記事から

![Wondershare Uniconverter 15_000012.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/1866d190-93ad-1158-7f31-139b4075bfab.gif)