方法 1: ~/.ssh/config で切り替える
configファイルを作成します
設定ファイルの場所
Windows の OpenSSH は以下を参照します: C:\Users\<ユーザー名>\.ssh\config
ない場合は、ファイルを新規作成してください。
複数の鍵を登録する例
GitHubでメインアカウントとサブアカウントで複数の SSH 鍵ファイルを使い分ける例
# メインアカウント用
Host github.com
HostName github.com
User git
IdentityFile C:\Users\<ユーザー名>\.ssh\id_ed25519
IdentitiesOnly yes
# サブアカウント用
Host github.com-name
HostName github.com
User git
IdentityFile C:\Users\<ユーザー名>\.ssh\id_ed25519_name
IdentitiesOnly yes
# サブアカウント用
Host github.com-sub
HostName github.com
User git
IdentityFile C:\Users\<ユーザー名>\.ssh\id_rsa
IdentitiesOnly yes
- Host
SSH接続時に使う接続名(エイリアス)を定義します。この名前を使って Git はどの設定を使うかを判断します。 - HostName
実際に接続するサーバーのホスト名(ドメイン名)です。 - IdentityFile
SSHで認証に使う秘密鍵ファイルのパスです。
この鍵に対応する「公開鍵(.pub)」を GitHub 側の
Settings → SSH and GPG keys に登録しておく必要があります。 - IdentitiesOnly yes
SSHが自動で他の鍵を試行しないようにする設定です。yesにすることで、この設定ブロックで指定した鍵だけを使うようになります。
コマンドプロンプトでアカウントを指定します
リモートURLを切り替える
メインアカウントの リポジトリの場合:
MAIN_USERはメインアカウント名、REPOは実際のリポジトリ名に変更してください。
git remote set-url origin git@github.com-main:MAIN_USER/REPO.gitサブアカウントの リポジトリの場合:
SUB_USERはサブアカウント名、REPOは実際のリポジトリ名に変更してください。
git remote set-url origin git@github.com-sub:SUB_USER/REPO.git接続確認
先ほどの例の場合は、次のコマンドを実行します。
メインアカウントの場合:
ssh -T git@github.comサブアカウントの場合:
ssh -T git@github.com-sub次のようなコメントが表示されれば、正常に接続できています。
Hi <username>! You've successfully authenticated...トラブルシューティング:接続確認でエラーメッセージが表示される
接続確認で次のようなエラーメッセージが表示される場合
Bad owner or permissions on C:\\Users\\ユーザー名/.ssh/config■config ファイルのアクセス権を修正します
PowerShell を「管理者として実行」して、次を実行してください:
icacls "%USERPROFILE%\.ssh\config" /inheritance:r
icacls "%USERPROFILE%\.ssh\config" /grant:r %USERNAME%:Fまたは、個別に記載したい場合は、ユーザー名の部分は、ご自身の環境に合わせて変更してください。
# 他のユーザーのアクセスを全削除
icacls "C:\Users\ユーザー名\.ssh\config" /inheritance:r
icacls "C:\Users\ユーザー名\.ssh\config" /grant:r ユーザー名:F/inheritance:r= 権限の継承を外す/grant:r ユーザー名:F= ユーザーにフルアクセスを付与
■.ssh ディレクトリ全体の権限を見直します
icacls "%USERPROFILE%\.ssh" /inheritance:r
icacls "%USERPROFILE%\.ssh" /grant:r %USERNAME%:Fまたは、個別に記載したい場合は、ユーザー名の部分は、ご自身の環境に合わせて変更してください。
icacls "C:\Users\ユーザー名\.ssh" /inheritance:r
icacls "C:\Users\ユーザー名\.ssh" /grant:r ユーザー名:F■.ssh フォルダ以下の 全ファイル・サブフォルダを再帰的に 自分の所有に変更したい場合は
takeown /F "%USERPROFILE%\.ssh" /R /D Y
icacls "%USERPROFILE%\.ssh" /reset
icacls "%USERPROFILE%\.ssh" /inheritance:r
icacls "%USERPROFILE%\.ssh" /grant:r "%USERNAME%:(OI)(CI)F"特徴
takeown /R:.sshフォルダ以下の 全ファイル・サブフォルダを再帰的に 自分の所有に変更。icacls /reset: フォルダ以下の ACL(アクセス制御リスト)を標準状態にリセット。icacls /inheritance:r: 親フォルダ(C:\Users\ユーザー名)からの権限継承を切る。grant:r "%USERNAME%:(OI)(CI)F": 自分(ログイン中のユーザー)に フォルダと配下のファイル(OI=object inherit, CI=container inherit)へフルアクセスを再帰的に付与。
■確認
icacls "%USERPROFILE%\.ssh\config"結果が「ユーザー名:(F)」だけになっていればOKです。
再度、接続の確認を行います。
その他
今回は説明していませんが、次の方法もあります。
- 方法 2:
ssh-agentに都度追加して使い分ける- 同時利用する場合など
- 方法 3: Git の
core.sshCommandでプロジェクトごとに指定- リポジトリ単位で完全に分けたいなど
コメント