コンテンツにスキップ

VSCode から SSH 経由で Push

表題のことをやろうとしたらものすごくハマったのでメモ。

https で PUSH する場合なら問題なくできるのだが、
その場合、毎度パスワードを聞かれてしまって非常にめんどくさいので
SSH 化してみた。
が、

これがでてしまって接続できない。
うーん。

SSH の認証用の鍵ファイルを作る

まずは、認証用の鍵を作成する。

コマンドプロンプトで、

1
C:\Users\<user_name>\.ssh

に移動して

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

同フォルダに鍵を作成。
.ssh フォルダ下に id_rsa.pub ファイルが作成されているので、中に書かれているテキストを
GitHub に登録する。

Settings の SSH and GPG keys をクリックして、

New SSH key をクリック。
Title には  MyPC  のようなにのキーなのかを入力し、
Key に、id_rsa.pub の中身をコピペして、Add SSH Key を追加する。

config 作成

Git で、ssh を使用して接続するときのオプションを config ファイルに記入する。

1
C:\Users\<user_name>\.ssh

下に、config ファイル(拡張子なしのテキスト)を作成。
その中に

1
2
3
4
Host github.com
  User git
  Hostname github.com
  IdentityFile "c:/Users/<user_name>/.ssh/id_rsa"

このように書く。
こうしておくと、github.com で SSH 接続する場合、
この設定に書かれている id_rsa などの設定で接続できるようになる。
続いて、この config が Git で使われるようにシンボリックリンクを作成する。

1
mklink "C:\Program Files\Git\etc\ssh\ssh_config" "C:\Users\<user_name>\.ssh\config"

ssh_config がすでにある場合は、削除する。
リンクが張られていない場合は、 .ssh 下に config を作成していても
そもそも使われていなかった。(ハマりポイント1)

ssh-agent を起動し忘れていた

鍵を作成して config を指定したのに、これでもうまくいかなかった。
うーむ、なんだろうと調べていったら
そもそも ssh-add でキーを登録していないと NG だった。
が、

1
Error connecting to agent: No such file or directory

になってしまって、キーを追加することすらできなかった。(ハマりポイント2)
このエラーが出るときは、Windows のサービスでエージェントが起動していないのが原因だった。

Windows のサービスから OpenSSH Authentication Agent のプロパティを開いて
開始+スタートアップからも起動できるようにしておく。

ここまでやってから、接続できるかテストしてみる。

1
ssh -T git@github.com

こんな感じで実行して、うまくいっていれば

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

GitHub のアカウント名(fereria)とう表示がされる。
ログイン時の名前は、fereria@github.com のようにしたくなるが、
この部分のアカウント名は git@で固定なので注意が必要。

接続はできたので、SSH 鍵の登録はおそらく問題はなさそう。
うまくいかない場合は

1
ssh -vT git@github.com

を実行すると、接続のテストを実行することができる。

public key の読み先が正しいかなども、確認することができる。

Git の使用する ssh-agent を登録する

コマンドプロンプトのテストなどでも正しく動いているし、Clone も正しく動いているが
それでも Permission Denied で VSCode で PUSH することができなかった。(ハマりポイント3)

どうやら、Git で上で指定した Windows の OpenSSH ではないものが使用されている場合
そもそも設定した SSH 設定が使われていないので接続できないようだった。
ので、Git の設定を変更して、Windows の OpenSSH を使用するようにする。

1
git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"

この設定をしたら、無事接続できた。

参考

ssh 接続でエラーがでてつながらない -> サービスが起動してない場合、フォルダがない扱いになる

config の設定

OpenSSH を使用する設定