0
0

GitHubのSSH接続でフォルダごとにGitHubアカウントを変更する

Last updated at Posted at 2024-06-11

目次

1.SSH接続をする
2.生成時に秘密鍵のファイル名を指定する。
3.フォルダごとに接続するアカウント(=SSH)を変更する
4.リポジトリをクローンするときの設定方法
5.configはpushされる?

GitHubとSSH接続をする

VSCodeでGitHubのプライベートリポジトリをSSH接続で使用する手順は以下の通りです。

  1. SSHキーを生成します(まだ生成していない場合)。ターミナルで以下のコマンドを実行し、指示に従ってください。

    ssh-keygen -t ed25519 -C "your_email@example.com"
    

    ※-C オプションをGitHubのアカウントにしておくと分かりやすい。

    ssh-keygen -t ed25519 -C "hogehoge"
    

    こうするとRSAの長い鍵が生成される。

    ssh-keygen -t rsa -b 4096 -C "hogehoge"
    
  2. 生成された公開鍵(デフォルトでは~/.ssh/id_ed25519.pub)の内容をコピーします。

  3. GitHubアカウントの設定ページ(https://github.com/settings/keys)を開き、新しいSSHキーを追加します。公開鍵の内容を貼り付けて保存します。

  4. VSCodeを開き、コマンドパレット(Ctrl+Shift+P または Cmd+Shift+P)を開きます。

  5. "Git: Clone"と入力して、"Git: Clone"コマンドを選択します。

  6. クローンするプライベートリポジトリのSSH URLを入力します(git@github.com:username/repository.gitの形式)。

  7. リポジトリのクローン先となるローカルディレクトリを選択します。

  8. クローンが完了したら、VSCodeでクローンしたリポジトリを開きます。

  9. VSCodeのターミナルを開き、以下のコマンドを実行して、SSHキーを使用していることを確認します。

    ssh -T git@github.com
    

    "Hi username! You've successfully authenticated, but GitHub does not provide shell access."というメッセージが表示されれば、SSHキーが正しく設定されています。

これで、VSCodeでGitHubのプライベートリポジトリをSSH接続で使用できるようになります。ソースコントロールビューやターミナルから、Gitの操作(コミット、プッシュ、プル)を行えます。

SSH接続を使用することで、GitHubにアクセスするたびにユーザー名とパスワードを入力する必要がなくなり、よりセキュアな環境で開発を進められます。

生成時に秘密鍵のファイル名を指定する

SSHキーを生成する際に、ファイル名を指定することができます。これにより、既存の秘密鍵ファイルを上書きすることなく、新しい鍵ペアを作成できます。

以下の手順で、カスタムのファイル名を指定してSSHキーを生成します。

  1. ターミナルを開き、ssh-keygenコマンドを実行します。-fオプションを使用して、鍵ペアのファイル名とパスを指定します。

    Linux/Mac
    ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/my_github_key
    
    PowerShell
    ssh-keygen -t ed25519 -C "your_email@example.com" -f $env:USERPROFILE/.ssh/my_github_key
    

    この例では、~/.ssh/my_github_keyという名前で鍵ペアが生成されます。

    PowerShell
    ssh-keygen -t rsa -b 4096 -C "hogehoge" -f $env:USERPROFILE\.ssh\id_rsa_hogehoge
    

    この例では、~/.ssh/id_rsa_hogehogeという名前で鍵ペアが生成されます。

  2. パスフレーズを設定するかどうかを聞かれます。セキュリティ上の理由から、パスフレーズを設定することが推奨されています。設定する場合は入力し、そうでない場合は空のままエンターキーを押します。

  3. 鍵ペアが生成されると、指定したファイル名で秘密鍵(my_github_key)と公開鍵(my_github_key.pub)が~/.sshディレクトリに作成されます。

  4. configファイルを編集して、新しい秘密鍵ファイルを使用するようにSSH設定を更新します。~/.ssh/configファイルを開き、以下の行を追加または修正します。

    Host github.com
      HostName github.com
      User git
      IdentityFile ~/.ssh/my_github_key
    
  5. GitHubアカウントの設定ページ(https://github.com/settings/keys)を開き、新しい公開鍵(my_github_key.pubの内容)を追加します。

  6. 新しい鍵ペアが正しく設定されたことを確認するため、ターミナルで以下のコマンドを実行します。

    ssh -T git@github.com
    

    "Hi username! You've successfully authenticated, but GitHub does not provide shell access."というメッセージが表示されれば、新しい鍵ペアが正常に機能しています。

これで、既存の秘密鍵ファイルを上書きすることなく、カスタムのファイル名で新しいSSHキーペアを生成できました。VSCodeや他のGitクライアントで使用する際は、新しい秘密鍵のパスを指定するようにしてください。

フォルダごとに接続するアカウント(=SSH)を変更する

.git/config ファイル内で [remote "origin"] セクションの url には、SSH接続を使用するためのカスタムホスト名を指定できます。この方法は、~/.ssh/config ファイルでホスト名とSSHキーを定義している場合に特に便利です。

~/.ssh/config ファイルで以下のように windows3_1 ホストを定義しているとします:

Host windows3_1
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_win31

この場合、.git/config ファイルの [remote "origin"] セクションで、url を以下のように設定できます:

[remote "origin"]
    url = git@windows3_1:hogehoge/gefugefu.git

この設定により、hogehoge リポジトリへのSSH接続に、~/.ssh/id_rsa_win31 キーが自動的に使用されます。

このアプローチの利点は以下の通りです:

  1. ~/.ssh/config ファイルでSSH接続の詳細を一元管理できる。
  2. .git/config ファイルでは、カスタムホスト名を使用してSSH接続を指定するだけでよい。
  3. VSCodeを含む多くのGitクライアントは、この設定を自動的に認識する。

したがって、[remote "origin"] セクションの url にカスタムホスト名を使用することは、SSH接続を管理する効果的な方法だと言えます。複数のリポジトリを扱う場合、~/.ssh/config ファイルでSSH接続の詳細を一元管理し、各リポジトリの .git/config ファイルでカスタムホスト名を使用するのが良いでしょう。

リポジトリをクローンするときの設定方法

SSH接続の準備ができたのちに、git clone を実行する前に git init を実行する必要はありません。

git init は、既存のディレクトリを新しい Git リポジトリとして初期化するために使用されます。これは、ローカルディレクトリで新しいリポジトリを作成する場合に使用します。

一方、git clone は、既存のリモートリポジトリのコピーをローカルマシンに作成するために使用されます。git clone コマンドは、新しいディレクトリを作成し、リモートリポジトリの内容をそのディレクトリにダウンロードして、自動的に新しい Git リポジトリとして初期化します。

したがって、git clone を実行するときは、git init を別途実行する必要はありません。git clone が、新しいリポジトリの初期化を含む全ての必要な作業を行います。

例えば、以下のコマンドは、hogehoge/gefugefu リポジトリのコピーを新しいディレクトリ gefugefu に作成します:

git clone git@windows3_1:hogehoge/gefugefu.git

このコマンドを実行した後、gefugefu ディレクトリには、リモートリポジトリの内容が含まれ、Git リポジトリとして初期化されています。

クローン後、.git/config ファイルを開いて、[remote "origin"] セクションの url を必要に応じて修正できます。例えば、~/.ssh/config ファイルでカスタムホスト名を定義している場合は、それに合わせて url を変更します。(※すでに自動設定されているはず)

[remote "origin"]
    url = git@windows3_1:hogehoge/gefugefu.git

この修正により、カスタムホスト名 windows3_1 が使用され、~/.ssh/config ファイルで定義されている対応する SSH キーが自動的に選択されます。

.git/config ファイルを保存した後、git fetchgit pullgit push などの通常の Git コマンドを使用して、リモートリポジトリとの間で変更を同期できます。

この方法により、git clone でリポジトリを取得した後、.git/config ファイルを修正するだけで、カスタムの SSH 設定を使用できるようになります。

configはpushされる?

.git/config ファイルは、通常、Git リポジトリの管理下に置かれておらず、git push コマンドを使用してリモートリポジトリにプッシュされることはありません。

.git/config ファイルは、ローカルリポジトリ固有の設定を保存するために使用されます。これには、リモートリポジトリの URL、ユーザー名、メールアドレス、その他のローカル設定が含まれます。これらの設定は、各開発者のローカル環境に固有のものであり、リポジトリを共有する他の開発者に影響を与えるべきではありません。

Git は、.gitignore ファイルに .git/ ディレクトリ全体を含めることで、.git/ ディレクトリとその内容がコミットやプッシュの対象から除外されるようにしています。これにより、ローカルの Git 設定がリモートリポジトリに誤ってプッシュされることを防ぎます。

ただし、リポジトリ全体を zip ファイルなどに圧縮して共有する場合は、.git/ ディレクトリが含まれる可能性があるため、共有前に .git/ ディレクトリを削除することをお勧めします。

したがって、.git/config ファイルを編集しても、その変更がリモートリポジトリにプッシュされることはないので、安心して必要な設定を行うことができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0