Git Clone SSHの完全ガイド|パスワード入力なしで安全にリポジトリをクローンする方法

その他

「GitHubにpushするたびにパスワード入力…面倒!」 「HTTPSでクローンしたら認証エラーが出た」 「SSH接続って難しそう…」

実は、SSH鍵を一度設定すれば、 パスワード入力なしで安全にGitを使えるんです!

しかも、HTTPSよりセキュアで高速。 プロの開発者が必ずSSHを使う理由がここにあります。

この記事では、SSH鍵の作成から git cloneの実行まで、 つまずきポイントを完全カバーして解説します。

30分後には、あなたも 「SSHマスター」になれますよ!


スポンサーリンク
  1. SSHとHTTPSの違い:なぜSSHを使うべきか
    1. 接続方法の比較
    2. SSHのメリット
    3. いつSSHを使うべき?
  2. ステップ1:SSH鍵の生成(初回のみ)
    1. 既存のSSH鍵を確認
    2. 新しいSSH鍵を生成
    3. 生成された鍵の確認
  3. ステップ2:GitHubにSSH鍵を登録
    1. 公開鍵をコピー
    2. GitHubに鍵を追加
    3. 接続テスト
  4. ステップ3:SSHでgit cloneを実行
    1. 基本的なクローン
    2. ディレクトリ名を指定してクローン
    3. ブランチを指定してクローン
    4. 浅いクローン(Shallow Clone)
  5. GitLab・Bitbucketでの設定
    1. GitLabの場合
    2. Bitbucketの場合
    3. 独自GitサーバーSSH鍵の管理
    4. 使い分けの例
  6. 既存リポジトリをHTTPSからSSHに変更
    1. リモートURLの確認
    2. SSHに変更
    3. 一括変換スクリプト
  7. トラブルシューティング
    1. エラー1:Permission denied (publickey)
    2. エラー2:Host key verification failed
    3. エラー3:Could not open a connection to your authentication agent
    4. エラー4:ssh: connect to host github.com port 22: Connection refused
    5. エラー5:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  8. 高度な設定とTips
    1. SSH鍵のパスフレーズ管理
    2. デプロイキーの設定
    3. 署名付きコミット
    4. ProxyJump(踏み台サーバー経由)
  9. セキュリティのベストプラクティス
    1. 1. 秘密鍵の保護
    2. 2. 鍵の定期更新
    3. 3. 緊急時の対応
  10. よくある質問(FAQ)
    1. Q1:複数のGitHubアカウントを使い分けるには?
    2. Q2:Windowsでssh-keygenが使えない
    3. Q3:パスフレーズを忘れた
    4. Q4:会社のプロキシ環境で使えない
    5. Q5:Ed25519とRSAどちらを使うべき?
  11. まとめ:もうパスワード入力とはさよなら!

SSHとHTTPSの違い:なぜSSHを使うべきか

接続方法の比較

項目SSHHTTPS
URL形式git@github.com:user/repo.githttps://github.com/user/repo.git
認証方法SSH鍵(自動)ユーザー名+パスワード/トークン
セキュリティ公開鍵暗号(最強)SSL/TLS(強い)
利便性パスワード不要毎回入力が必要
初期設定やや複雑簡単
ファイアウォール22番ポート443番ポート

SSHのメリット

1. パスワード入力が不要

# HTTPSの場合(毎回認証)
$ git push
Username: your-username
Password: ******* # 毎回入力...

# SSHの場合(自動認証)
$ git push  # そのまま実行!

2. より安全

  • パスワードがネットワークを流れない
  • 鍵ペアによる強固な認証

3. 複数アカウントの管理が楽

  • GitHub個人用、会社用を簡単に切り替え

いつSSHを使うべき?

SSH推奨の場面:

  • 頻繁にpush/pullする
  • チーム開発
  • 自動化スクリプト
  • セキュリティ重視

HTTPS推奨の場面:

  • 一時的な利用
  • 公開リポジトリの読み取りのみ
  • ファイアウォール制限環境

ステップ1:SSH鍵の生成(初回のみ)

既存のSSH鍵を確認

まず、既にSSH鍵を持っているか確認:

# SSH鍵の確認(Mac/Linux/Git Bash)
ls -la ~/.ssh

# Windowsコマンドプロンプト
dir %USERPROFILE%\.ssh

以下のファイルがあれば既に鍵あり:

  • id_rsa / id_rsa.pub(RSA鍵)
  • id_ed25519 / id_ed25519.pub(Ed25519鍵)

新しいSSH鍵を生成

Ed25519鍵の生成(推奨)

# Ed25519鍵を生成(最新・高速・安全)
ssh-keygen -t ed25519 -C "your-email@example.com"

入力を求められる項目:

  1. 保存場所
Enter file in which to save the key (/Users/you/.ssh/id_ed25519):

→ Enterキーでデフォルト場所に保存

  1. パスフレーズ
Enter passphrase (empty for no passphrase):

→ 追加セキュリティが必要なら設定(省略可)

  1. パスフレーズの確認
Enter same passphrase again:

→ 同じパスフレーズを再入力

RSA鍵の生成(互換性重視)

古いシステムとの互換性が必要な場合:

# RSA 4096ビット鍵を生成
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"

生成された鍵の確認

# 生成された鍵を確認
ls -la ~/.ssh/

# 出力例
-rw-------  id_ed25519      # 秘密鍵(絶対に共有しない!)
-rw-r--r--  id_ed25519.pub  # 公開鍵(GitHubに登録する)

ステップ2:GitHubにSSH鍵を登録

公開鍵をコピー

Mac/Linuxの場合

# クリップボードにコピー(Mac)
pbcopy < ~/.ssh/id_ed25519.pub

# クリップボードにコピー(Linux)
xclip -selection clipboard < ~/.ssh/id_ed25519.pub

# または表示してコピー
cat ~/.ssh/id_ed25519.pub

Windowsの場合

# Git Bash
cat ~/.ssh/id_ed25519.pub

# PowerShell
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard

# コマンドプロンプト
type %USERPROFILE%\.ssh\id_ed25519.pub

GitHubに鍵を追加

  1. GitHubにログイン
  2. Settings(設定)へ移動
    • 右上のプロフィール画像 → Settings
  3. SSH and GPG keys を選択
    • 左メニューの「SSH and GPG keys」
  4. New SSH key をクリック
  5. 情報を入力
    • Title:識別しやすい名前
      • 例:「Personal MacBook」「Work Laptop」
    • Key type:Authentication Key
    • Key:コピーした公開鍵を貼り付け
  6. Add SSH key をクリック
  7. GitHubパスワードで確認

接続テスト

# GitHubへの接続をテスト
ssh -T git@github.com

# 初回接続時の警告
The authenticity of host 'github.com (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is SHA256:xxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? 

# yesと入力

# 成功時のメッセージ
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

ステップ3:SSHでgit cloneを実行

基本的なクローン

# SSH URLでクローン
git clone git@github.com:username/repository.git

# 例:実際のリポジトリ
git clone git@github.com:facebook/react.git

ディレクトリ名を指定してクローン

# 別名でクローン
git clone git@github.com:username/repository.git my-project

# カレントディレクトリにクローン
git clone git@github.com:username/repository.git .

ブランチを指定してクローン

# 特定ブランチのみクローン
git clone -b develop git@github.com:username/repository.git

# 単一ブランチのみ(履歴も最小限)
git clone --single-branch -b main git@github.com:username/repository.git

浅いクローン(Shallow Clone)

# 最新のコミットのみ取得(高速)
git clone --depth 1 git@github.com:username/repository.git

# 最新10コミットを取得
git clone --depth 10 git@github.com:username/repository.git

GitLab・Bitbucketでの設定

GitLabの場合

# SSH鍵の登録
# 1. GitLab → Preferences → SSH Keys
# 2. 公開鍵を貼り付け

# 接続テスト
ssh -T git@gitlab.com

# クローン
git clone git@gitlab.com:username/repository.git

Bitbucketの場合

# SSH鍵の登録
# 1. Personal settings → SSH keys
# 2. Add key で公開鍵を追加

# 接続テスト
ssh -T git@bitbucket.org

# クローン
git clone git@bitbucket.org:username/repository.git

独自GitサーバーSSH鍵の管理

設定ファイル(~/.ssh/config)の活用

# ~/.ssh/config を作成/編集
nano ~/.ssh/config

設定例:

# GitHub個人用
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal

# GitHub会社用
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work

# GitLab
Host gitlab.com
    HostName gitlab.com
    User git
    IdentityFile ~/.ssh/id_ed25519_gitlab

# 社内GitLab
Host git.company.com
    HostName git.company.com
    User git
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_company

使い分けの例

# 個人GitHubアカウント
git clone git@github.com:personal/repo.git

# 会社GitHubアカウント(エイリアス使用)
git clone git@github-work:company/repo.git

# 社内GitLab
git clone git@git.company.com:team/project.git

既存リポジトリをHTTPSからSSHに変更

リモートURLの確認

# 現在のリモートURL確認
git remote -v

# 出力例(HTTPS)
origin  https://github.com/username/repo.git (fetch)
origin  https://github.com/username/repo.git (push)

SSHに変更

# HTTPSからSSHに変更
git remote set-url origin git@github.com:username/repository.git

# 確認
git remote -v

# 出力例(SSH)
origin  git@github.com:username/repository.git (fetch)
origin  git@github.com:username/repository.git (push)

一括変換スクリプト

#!/bin/bash
# すべてのHTTPS URLをSSHに変換

for repo in $(find . -name .git -type d); do
    cd $(dirname $repo)
    
    # 現在のURLを取得
    url=$(git remote get-url origin 2>/dev/null)
    
    if [[ $url == https://github.com/* ]]; then
        # HTTPSをSSHに変換
        ssh_url=$(echo $url | sed 's|https://github.com/|git@github.com:|')
        git remote set-url origin $ssh_url
        echo "Changed: $url -> $ssh_url"
    fi
    
    cd - > /dev/null
done

トラブルシューティング

エラー1:Permission denied (publickey)

原因と解決策:

# 1. SSH鍵が正しく読み込まれているか確認
ssh-add -l

# 鍵が表示されない場合は追加
ssh-add ~/.ssh/id_ed25519

# 2. 正しい鍵が使われているか確認(詳細ログ)
ssh -vT git@github.com

# 3. 鍵の権限を確認
ls -la ~/.ssh/
# 正しい権限:
# .ssh ディレクトリ: 700
# 秘密鍵: 600
# 公開鍵: 644

# 権限を修正
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

エラー2:Host key verification failed

解決方法:

# known_hostsから古いエントリを削除
ssh-keygen -R github.com

# 再度接続
ssh -T git@github.com
# yesで新しいホスト鍵を受け入れる

エラー3:Could not open a connection to your authentication agent

解決方法:

# ssh-agentを起動(Bash)
eval $(ssh-agent -s)

# ssh-agentを起動(Fish shell)
eval (ssh-agent -c)

# 鍵を追加
ssh-add ~/.ssh/id_ed25519

エラー4:ssh: connect to host github.com port 22: Connection refused

ファイアウォールで22番ポートがブロックされている場合:

# ~/.ssh/config に追加
Host github.com
    Hostname ssh.github.com
    Port 443
    User git

# テスト
ssh -T git@github.com

エラー5:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

GitHubのホスト鍵が変更された場合:

# エラーメッセージの指示に従って該当行を削除
# 例:
sed -i '3d' ~/.ssh/known_hosts

# または手動で編集
nano ~/.ssh/known_hosts
# github.comの行を削除

高度な設定とTips

SSH鍵のパスフレーズ管理

macOSのキーチェーン活用

# ~/.ssh/config に追加
Host *
    AddKeysToAgent yes
    UseKeychain yes
    IdentityFile ~/.ssh/id_ed25519

ssh-agentの自動起動(Linux/WSL)

# ~/.bashrc に追加
if [ -z "$SSH_AUTH_SOCK" ]; then
    eval $(ssh-agent -s)
    ssh-add ~/.ssh/id_ed25519
fi

デプロイキーの設定

リポジトリ専用の鍵(読み取り専用/読み書き可能):

# デプロイ用の鍵を生成
ssh-keygen -t ed25519 -f ~/.ssh/deploy_key_repo1

# GitHubリポジトリ → Settings → Deploy keys
# 公開鍵を追加

# ~/.ssh/config に設定
Host github-deploy-repo1
    HostName github.com
    User git
    IdentityFile ~/.ssh/deploy_key_repo1

# 使用
git clone git@github-deploy-repo1:username/repo1.git

署名付きコミット

# GPG署名の代わりにSSH署名を使用(Git 2.34+)
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub

# 署名付きコミット
git commit -S -m "Signed commit"

ProxyJump(踏み台サーバー経由)

# ~/.ssh/config
Host git-internal
    HostName git.internal.com
    User git
    ProxyJump bastion.company.com
    IdentityFile ~/.ssh/id_ed25519

セキュリティのベストプラクティス

1. 秘密鍵の保護

絶対にやってはいけないこと:

  • ❌ 秘密鍵をGitHubにアップロード
  • ❌ メールで送信
  • ❌ クラウドストレージに平文保存

推奨事項:

  • ✅ パスフレーズを設定
  • ✅ 定期的に鍵を更新(年1回)
  • ✅ 用途別に鍵を分ける

2. 鍵の定期更新

# 古い鍵をバックアップ
mv ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.old
mv ~/.ssh/id_ed25519.pub ~/.ssh/id_ed25519.pub.old

# 新しい鍵を生成
ssh-keygen -t ed25519 -C "your-email@example.com"

# GitHubで古い鍵を削除、新しい鍵を追加

3. 緊急時の対応

鍵が漏洩した可能性がある場合:

  1. すぐにGitHub/GitLabから鍵を削除
  2. 新しい鍵を生成
  3. アクセスログを確認
  4. 不審なコミットがないか確認

よくある質問(FAQ)

Q1:複数のGitHubアカウントを使い分けるには?

A:SSH configでホストエイリアスを設定します。

# ~/.ssh/config
Host github-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal

Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work

# 使用例
git clone git@github-personal:myname/personal-project.git
git clone git@github-work:company/work-project.git

Q2:Windowsでssh-keygenが使えない

A:Git for Windowsをインストールします。

  1. Git for Windowsをインストール
  2. Git Bashを起動
  3. 通常のLinuxコマンドとして実行

または、PowerShellで:

# OpenSSHクライアントを有効化(Windows 10/11)
Add-WindowsCapability -Online -Name OpenSSH.Client

Q3:パスフレーズを忘れた

A:新しい鍵を作り直す必要があります。

パスフレーズは回復できないため、 新しい鍵ペアを生成して GitHubに登録し直してください。

Q4:会社のプロキシ環境で使えない

A:HTTPSトンネリングを使用します。

# ~/.ssh/config
Host github.com
    HostName ssh.github.com
    Port 443
    User git
    ProxyCommand connect -H proxy.company.com:8080 %h %p

Q5:Ed25519とRSAどちらを使うべき?

A:Ed25519を推奨します。

  • Ed25519:新しい、高速、安全、短い鍵
  • RSA:互換性が高い、古いシステムでも動作

2023年以降のシステムなら Ed25519で問題ありません。


まとめ:もうパスワード入力とはさよなら!

SSH認証の設定は、最初は面倒に感じるかもしれませんが、 一度設定すれば永続的に便利になります。

設定手順のおさらい:

  1. ✅ SSH鍵を生成(ssh-keygen)
  2. ✅ 公開鍵をGitHubに登録
  3. ✅ 接続テスト(ssh -T)
  4. ✅ git clone実行

SSHのメリット:

  • パスワード入力不要
  • より安全な認証
  • 複数アカウントの管理が簡単
  • 自動化に最適

次のステップ:

  • 既存リポジトリをSSHに変更
  • SSH configで効率化
  • デプロイキーの活用
  • 署名付きコミット

これで、あなたも「SSHマスター」です!

毎日の開発が格段に楽になるはずです。 さあ、今すぐSSH鍵を設定して、 快適なGit生活を始めましょう!

コメント

タイトルとURLをコピーしました