VSCodeでGitをSSH接続して利用する方法

採用はこちら

VSCodeでGitHubなどのリモートリポジトリを利用する場合、HTTPSだけでなくSSH接続も利用できます。

SSH接続を設定すると、GitHubへgit clone、git pull、git pushなどを実行するときに、毎回ユーザー名やアクセストークンを入力する必要がなくなります。

ただし、VSCodeそのものにSSH鍵を登録するわけではありません。

基本的には、パソコン側でGitとSSHの設定を行い、その環境をVSCodeから利用します。

ここではGitHubを例に、VSCodeでGitをSSH接続して利用する方法を詳しく解説します。

目次

VSCodeでGitをSSH接続する仕組み

VSCode・Git・SSHの関係

VSCodeにはGitを操作するためのSource Control機能が搭載されています。

ただし、Gitそのものは別途パソコンへインストールして利用するのが基本です。

SSH接続を利用する場合は、概念的には次のような流れになります。

VSCode
↓
Git
↓
SSH
↓
GitHub

VSCodeからGitの操作を実行すると、GitがSSHを利用してGitHubへ接続します。

そのため、「VSCodeにSSH鍵を登録する」というよりも、「OS上でSSH認証を設定し、その環境をVSCodeから利用する」と考えると分かりやすいでしょう。

GitHub用SSHとRemote SSHは別物

VSCodeには、SSHサーバーへ接続してリモート開発するためのRemote SSH機能もあります。

しかし、GitHubへgit pushするためのSSH接続と、VSCodeからLinuxサーバーなどへSSHログインする機能は別物です。

GitHubへGit操作を行うだけであれば、Remote SSHの設定は必要ありません。

Gitがインストールされているか確認する

Gitのバージョンを確認する

まず、VSCodeの統合ターミナルを開きます。

「ターミナル」から「新しいターミナル」を選択し、次のコマンドを実行します。

git --version

例えば、次のように表示されればGitを利用できます。

git version 2.xx.x

gitコマンドが見つからない場合は、Gitをインストールする必要があります。

WindowsではGit for Windowsを利用する方法が一般的です。

Gitをインストールした直後にVSCodeで認識されない場合は、一度VSCodeを再起動すると改善することがあります。

Gitのユーザー情報を設定する

user.nameとuser.emailを設定する

Gitを初めて利用する場合は、コミットで使用する名前とメールアドレスを設定します。

git config --global user.name "Taro Yamada"
git config --global user.email "taro@example.com"

設定内容は次のコマンドで確認できます。

git config --global --list

ここで設定するuser.nameとuser.emailは、Gitのコミットに記録される作者情報です。

SSH接続の認証情報ではありません。

そのため、SSH接続そのものに必須の設定ではありませんが、Gitを利用するうえでは設定しておくとよいでしょう。

既存のSSH鍵を確認する

.sshフォルダを確認する

新しいSSH鍵を作成する前に、すでにSSH鍵が存在していないか確認します。

macOSやLinux、Git Bashでは次のコマンドを利用できます。

ls ~/.ssh

Windows PowerShellでは次のように確認できます。

Get-ChildItem ~/.ssh

例えば、次のファイルが存在する場合は、すでにED25519形式のSSH鍵が作成されている可能性があります。

id_ed25519
id_ed25519.pub

また、環境によっては次のようなRSA鍵が存在することもあります。

id_rsa
id_rsa.pub

.pubが付いているファイルが公開鍵です。

.pubが付いていないファイルが秘密鍵です。

秘密鍵は他人へ渡したり、GitHubなどへ公開したりしないようにしてください。

SSH鍵を新しく作成する

ED25519形式のSSH鍵を作成する

新しくSSH鍵を作成する場合は、ED25519形式を利用する方法が一般的です。

次のコマンドを実行します。

ssh-keygen -t ed25519 -C "メールアドレス"

例えば、次のように指定します。

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

実行すると、SSH鍵の保存場所を確認されます。

Enter file in which to save the key

通常は、そのままEnterキーを押せば問題ありません。

標準では次のような場所へ保存されます。

~/.ssh/id_ed25519

Windowsでは通常、ユーザーフォルダ内の.sshフォルダに保存されます。

C:\Users\ユーザー名\.ssh\id_ed25519

SSH鍵を作成すると、基本的に次の2ファイルが生成されます。

id_ed25519
id_ed25519.pub

パスフレーズを設定する

SSH鍵の作成中には、次のようにパスフレーズの入力を求められます。

Enter passphrase

パスフレーズは空欄でもSSH鍵を作成できます。

ただし、秘密鍵が第三者に取得された場合のリスクを抑えるため、重要な環境ではパスフレーズを設定する方が安全です。

ssh-agentを利用すれば、毎回パスフレーズを入力する手間を減らすこともできます。

ssh-agentへSSH鍵を登録する

Windowsの場合

Windowsでは、OpenSSH Authentication Agentサービスを利用できます。

管理者権限のPowerShellを開き、次のコマンドを実行します。

Get-Service -Name ssh-agent | Set-Service -StartupType Manual

続いて、ssh-agentを起動します。

Start-Service ssh-agent

その後、通常のPowerShellやVSCodeのターミナルで、秘密鍵をssh-agentへ登録します。

ssh-add $env:USERPROFILE\.ssh\id_ed25519

登録されているSSH鍵は、次のコマンドで確認できます。

ssh-add -l

Linuxの場合

Linuxでは、必要に応じてssh-agentを起動します。

eval "$(ssh-agent -s)"

続いて、SSH鍵を登録します。

ssh-add ~/.ssh/id_ed25519

macOSの場合

macOSでもssh-agentを利用できます。

さらに、macOSではKeychainを利用してSSH鍵のパスフレーズを管理できます。

環境によっては次のようなコマンドを利用します。

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

macOSとLinuxではSSH周辺の設定方法が一部異なるため、同じ設定をそのまま流用するのではなく、利用しているOSに合わせて設定することが重要です。

GitHubへSSH公開鍵を登録する

公開鍵の内容を表示する

SSH鍵を作成したら、公開鍵をGitHubへ登録します。

macOSやLinux、Git Bashでは次のコマンドを実行します。

cat ~/.ssh/id_ed25519.pub

Windows PowerShellでは次のように実行できます。

Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub

次のような文字列が表示されます。

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... user@example.com

表示された1行全体をコピーします。

GitHubへ登録するのは、必ず.pubが付いた公開鍵です。

id_ed25519.pub

次の秘密鍵をGitHubへ貼り付けてはいけません。

id_ed25519

GitHubのSSH and GPG keysへ登録する

GitHubへログインし、アカウント設定から次の画面を開きます。

Settings
→ SSH and GPG keys
→ New SSH key

Titleには、どのパソコンのSSH鍵なのか分かりやすい名前を入力します。

例えば次のような名前です。

Windows PC
Work Laptop

Git操作の認証に使うSSH鍵であれば、Key typeは通常Authentication Keyを選択します。

Key欄へ先ほどコピーした公開鍵を貼り付け、SSH鍵を追加します。

GitHubとのSSH接続を確認する

ssh -Tコマンドを実行する

GitHubへ公開鍵を登録したら、SSH接続が正常に動作するか確認します。

ssh -T git@github.com

初回接続では、GitHubのホストキーを信頼するか確認するメッセージが表示されることがあります。

表示されたフィンガープリントをGitHub公式情報と照合し、問題がないことを確認してからyesを入力します。

認証に成功すると、概ね次のような内容が表示されます。

Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

「GitHub does not provide shell access」と表示されてもエラーではありません。

GitHubはSSH経由で通常のシェルログインを提供しているわけではないためです。

You've successfully authenticatedと表示されていれば、SSH認証は成功しています。

終了コードだけで判断しない

ssh -T git@github.comでは、認証に成功していても終了コードが1になる場合があります。

そのため、スクリプトなどで接続確認を行う場合は、終了コードだけで認証失敗と判断しないよう注意が必要です。

通常の手動確認では、表示されたメッセージに認証成功の内容が含まれているか確認するとよいでしょう。

VSCodeからSSHでGitリポジトリをCloneする

GitHubからSSH URLを取得する

GitHubでCloneしたいリポジトリを開きます。

「Code」から「SSH」を選択すると、SSH形式のURLを取得できます。

一般的には次のような形式です。

git@github.com:ユーザー名/リポジトリ名.git

例えば次のようになります。

git@github.com:taro/sample-project.git

HTTPSの場合は次のような形式です。

https://github.com/taro/sample-project.git

SSH接続を利用したい場合は、SSH形式のURLを使用します。

VSCodeからCloneする

VSCodeでコマンドパレットを開きます。

Windows・Linuxでは次のショートカットを利用できます。

Ctrl + Shift + P

macOSでは次のショートカットです。

Command + Shift + P

コマンドパレットで、

Git: Clone

を選択します。

続いて、GitHubからコピーしたSSH URLを入力します。

git@github.com:taro/sample-project.git

保存場所を選択するとCloneが実行されます。

Cloneが完了したら、そのリポジトリをVSCodeで開きます。

ターミナルからCloneする

VSCodeの統合ターミナルから直接Cloneすることもできます。

git clone git@github.com:taro/sample-project.git

Clone後は対象ディレクトリへ移動します。

cd sample-project

codeコマンドが利用できる環境なら、次のように現在のディレクトリをVSCodeで開けます。

code .

VSCodeからcommitやpushを行う

Source Controlから操作する

VSCodeでは、左側のSource ControlからGit操作を行えます。

WindowsやLinuxでは、次のショートカットでもSource Controlを開けます。

Ctrl + Shift + G

変更したファイルはChangesに表示されます。

ファイル横の+をクリックするとステージングできます。

ターミナルから操作する

ターミナルから操作する場合は、通常のGitコマンドを利用します。

ファイルをステージングします。

git add .

コミットします。

git commit -m "Update README"

その後、リモートリポジトリへpushします。

git push

remote URLがSSH形式になっていれば、GitHubとの通信はSSH経由で行われます。

SSH接続になっているか確認する

git remote -vで確認する

既存のリポジトリがSSH接続になっているか確認するには、次のコマンドを実行します。

git remote -v

次のように表示されていればSSH形式です。

origin git@github.com:taro/sample-project.git (fetch)
origin git@github.com:taro/sample-project.git (push)

一方、次のようになっていればHTTPS形式です。

origin https://github.com/taro/sample-project.git (fetch)
origin https://github.com/taro/sample-project.git (push)

SSH鍵を設定しただけでは、既存のHTTPSリポジトリが自動的にSSH形式へ変更されるわけではありません。

HTTPSからSSHへ変更する

remote URLを書き換える

すでにHTTPSでCloneしているリポジトリでも、Cloneし直す必要はありません。

次のコマンドでremote URLを変更できます。

git remote set-url origin git@github.com:taro/sample-project.git

変更後は、次のコマンドで確認します。

git remote -v

SSH形式のURLが表示されていれば変更完了です。

以降の、

git fetch
git pull
git push

などはSSH経由で実行されます。

複数のGitHubアカウントを使う場合

SSH鍵をアカウントごとに分ける

仕事用と個人用など、複数のGitHubアカウントを同じパソコンで利用する場合は、SSH鍵を分ける方法があります。

例えば次のようにします。

~/.ssh/id_ed25519_personal
~/.ssh/id_ed25519_work

~/.ssh/configを設定する

SSH設定ファイルに、GitHubアカウントごとの接続設定を書きます。

Host github-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal
    IdentitiesOnly yes

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

個人用アカウントでは次のようなURLを利用します。

git@github-personal:username/repository.git

仕事用では次のようにできます。

git@github-work:company/repository.git

複数のGitHubアカウントを利用している環境では、非常に便利な設定です。

Permission denied (publickey)が表示される場合

GitHubに公開鍵が登録されているか確認する

SSH接続時によくあるエラーが次のメッセージです。

Permission denied (publickey).

まず、GitHubの「Settings」から「SSH and GPG keys」を開き、利用している公開鍵が登録されているか確認します。

ssh-agentに鍵が登録されているか確認する

次のコマンドを実行します。

ssh-add -l

SSH鍵が表示されれば、ssh-agentへ登録されています。

登録されていない場合は、秘密鍵を追加します。

macOSやLinuxでは次のように実行できます。

ssh-add ~/.ssh/id_ed25519

Windows PowerShellでは次のように実行できます。

ssh-add $env:USERPROFILE\.ssh\id_ed25519

SSHの詳細ログを確認する

原因が分からない場合は、SSHの詳細ログを表示できます。

ssh -vT git@github.com

さらに詳しく確認する場合は、vを増やします。

ssh -vvT git@github.com
ssh -vvvT git@github.com

どのSSH鍵を試しているのか、どこで認証に失敗しているのかなどを確認できます。

WindowsでSSHがうまく動かない場合

Windows OpenSSHとGit for WindowsのSSHに注意する

Windowsでは、複数のSSH実装が存在する場合があります。

代表的なのは次の2つです。

Windows標準のOpenSSH
Git for Windows付属のOpenSSH

そのため、

PowerShellでは接続できる
VSCodeからgit pushすると失敗する

といった問題が発生する場合があります。

利用しているSSHを確認する

PowerShellでは次のコマンドでPATH上のSSHを確認できます。

where.exe ssh

また、Git側で特定のSSH実行ファイルが指定されていないか確認する場合は、次のコマンドを利用できます。

git config --show-origin --get core.sshCommand

必要に応じてGitで利用するSSHを明示的に指定することもできますが、正常に動作している環境で無理に変更する必要はありません。

SSHの指定は、接続トラブルが発生したときの対処として考えるとよいでしょう。

SSH鍵を利用するときの注意点

秘密鍵を共有しない

最も重要なのは、秘密鍵を他人へ渡さないことです。

次のファイルは秘密鍵です。

id_ed25519

GitHubへ登録するのは、次の公開鍵です。

id_ed25519.pub

この2つを間違えないようにしましょう。

秘密鍵をGit管理しない

通常、SSH鍵はユーザーのホームディレクトリにある.sshフォルダへ保存します。

~/.ssh/

プロジェクトディレクトリへSSH秘密鍵をコピーすると、誤ってGit管理対象へ追加してしまう危険があります。

秘密鍵をプロジェクト内へ保存しないようにしましょう。

必要に応じてパスフレーズを設定する

SSH秘密鍵にはパスフレーズを設定できます。

パスフレーズを設定すると、秘密鍵ファイルだけが第三者に取得された場合でも、不正利用されるリスクを抑えられます。

ssh-agentと組み合わせれば、利便性を保ちながらSSH鍵を管理できます。

VSCodeでGitをSSH接続するときの基本手順

一連の流れを確認する

VSCodeでGitHubをSSH接続して利用する場合は、基本的に次の順番で設定します。

1. Gitをインストール
↓
2. git --versionで確認
↓
3. 必要に応じてGitのユーザー情報を設定
↓
4. 既存のSSH鍵を確認
↓
5. ssh-keygenでSSH鍵を作成
↓
6. ssh-agentへ秘密鍵を登録
↓
7. GitHubへ公開鍵を登録
↓
8. ssh -T git@github.comで接続確認
↓
9. SSH形式のURLでClone
↓
10. VSCodeからcommit・pull・pushを行う

まず確認したい3つのコマンド

SSH接続がうまくいかない場合は、まず次の3つを確認すると原因を切り分けやすくなります。

git --version
ssh -T git@github.com
git remote -v

git --versionでGitが利用できることを確認します。

ssh -T git@github.comでGitHubへのSSH認証を確認します。

git remote -vでリポジトリの接続先がSSH形式になっているか確認します。

この3点が正しく設定されていれば、VSCodeからのgit pullやgit pushも基本的にSSH経由で利用できます。

まとめ

VSCodeでGitをSSH接続して利用する場合、重要なのはVSCode自体へSSH鍵を登録することではありません。

パソコン側でGitとSSH認証を正しく設定し、その環境をVSCodeから利用します。

SSH接続を設定すると、GitHubとの通信を公開鍵認証で行えるようになり、HTTPS接続でアクセストークンを入力する運用とは異なる方法で安全かつ便利にGitを利用できます。

特に重要なのは、公開鍵と秘密鍵を正しく区別することです。

GitHubへ登録するのは.pubが付いた公開鍵であり、秘密鍵はローカル環境から外へ出さないようにします。

SSH接続に問題が発生した場合は、ssh -T git@github.com、ssh-add -l、git remote -vなどを利用すると、原因を効率的に切り分けられます。

一度SSH環境を正しく設定しておけば、VSCodeのSource Controlや統合ターミナルから、Clone・Pull・PushといったGit操作をスムーズに行えるようになります。

以上、VSCodeでGitをSSH接続して利用する方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次