Git Tech インフラ

Windows環境にてgitリポジトリへssh接続する

TL;DR

Kanon

先日windowsマシンにて、backlogのリポジトリへssh接続にてpushを行うにあたって若干ハマったので備忘録です。

vscodeからでもコマンドからでも実行できるようになります。

なににハマったのか?

ssh接続を行うにあたって必要なのが、当然ながら公開鍵と秘密鍵が必要になってきます。

そこでssh-keygenを叩いたのですが、鍵の名前を何にするか聞かれます。

自分の環境には、すでにC:\Users\ユーザー名\.ssh配下にデフォルトの名前である、

  • id_rsa(秘密鍵)
  • id_rsa.pub(公開鍵)

があり、「はいはいすでにおるもんな。(チガウナマエツケー)」で鍵を作成。

公開鍵を意気揚々とbacklogへ登録し、いざpush!

…しても、当然ssh接続時にエラーとなりました。

原因は、「当該backlogのリポジトリへのssh接続にあたって、どの鍵を使うのか?」をsshちゃんが分かってないからだなとすぐに気づいたのですが、Windowsマシンでsshの設定ってどうするんだ?となったので、その時に調べたことのメモとなります。

Kanon

というわけで以下、設定方法

なにはともあれssh-keygen

そもそもなのですが、なにも考えずWindowsマシンでssh-keygenって叩きましたが、いつのまにかWindowsには標準でOpenSSLが搭載されてたんですね。

ssh-keygen

今回はテストなので特に鍵長とか暗号化方式は指定なしのデフォルトでやってます。

で、ssh-keygenを叩くと鍵の作成場所とパスフレーズを聞かれます。

今回はC:\Users\user/.ssh/id_rsa_sshtestという名前で鍵を作るように指定しました。

Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\user/.ssh/id_rsa): C:\Users\user/.ssh/id_rsa_sshtest    
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in C:\Users\user/.ssh/id_rsa_sshtest.
Your public key has been saved in C:\Users\user/.ssh/id_rsa_sshtest.pub.
The key fingerprint is:
SHA256:5EHGvPC8R2Pn2VHqegP8bukfdV9Eau8fqIa/VbGz7aU user@DESKTOP-TGTG3QG
The key's randomart image is:
+---[RSA 3072]----+
|       oo       .|
|      .oo      o.|
|       +o.    o+.|
|       o+.+ ..ooo|
|        S+ = + ==|
|        . . = =.O|
|         ..  * ==|
|         . .+ *o=|
|          o+.=Eo+|
+----[SHA256]-----+

作成した公開鍵をgithubに登録する

backlogは業務で使っているのですが、私用では登録していないので、今回はかわりにgithubを使って説明します。

backlogの公開鍵の登録方法はとても簡単で、ヘルプページを見ればすぐにできると思います。

ここで説明するgithubへの登録方法とほぼ同じ(画面が違うだけ)なので、ここでの説明を置き換えていただければ大丈夫です。

backlogへの公開鍵の登録方法は以下をご参照ください。

https://backlog.com/ja/git-tutorial/reference/ssh/

githubのプロフィールアイコンをクリックして表示される、「Settings」をクリック。

表示されたページ左側のメニューバーにある、「SSH and GPG keys」をクリック。

「New SSH Key」をクリック。

ここで表示されたページに、先ほどssh-keygenで作成した公開鍵を登録します。

ここでの例だと、「ssh-keygenの結果」の6行目に表示されていた、「C:\Users\user/.ssh/id_rsa_sshtest.pub」が公開鍵なので、このファイルをテキストエディタで開いて、コピー。

こんな感じで見えるはず

そして、いかにペーストして「Add SSH key」を押下。

Kanon

ここまでで接続の準備は完了です

ssh接続の疎通テスト

接続の準備はできたので、さっそくテストしていきたいと思います。

まずはgithubにリポジトリを作成し、ssh接続情報を確認します。

今回の場合、git@github.com:ysknsid25/sshtest.gitが接続情報になっています。

で、テストのために以下のコマンドを叩く。

ssh -vT -i C:\Users\user\.ssh\id_rsa_sshtest git@github.com

C:\Users\user.ssh\id_rsa_sshtestは作成した秘密鍵のフルパスを指定してください。

git@github.comはsshユーザーとホスト名で、gitがユーザー。github.comはホスト名です。

ここでは説明のため秘密鍵のフルパスを公開していますが、秘密鍵は絶対に漏れないように管理してください

上記のコマンドを叩いた結果、以下のようなログが出ていれば接続成功です。

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

今度はgitコマンドに秘密鍵を設定していく

さっきまでの手順ではsshコマンドでのテストに過ぎず、sshコマンドの引数として使用する鍵を指定しました。

しかし、あくまでやりたいことはgitコマンドでssh接続することなので、さきほどのsshコマンドでのテストのように、使用する鍵を都度指定できるわけではありません。

ということは、gitコマンドが発行される際に、「とあるgitのリポジトリ(ホスト)と通信する際にはこの鍵を使ってね」と設定する場所があるはず。

それが、C:\Users\user/.ssh/configファイルです。

存在しない場合には、上記の場所にconfigファイルを作成して、以下のように記載してください。

存在する場合には、configファイルに以下のように追記してください。

Host github
  HostName github.com
  IdentityFile C:\Users\user\.ssh\id_rsa_sshtest
  User git

ポイント

Host: 鍵を使い分ける単位を指定するためのもの。区別できればなんでもいいです。
HostName: git@github.com:ysknsid25/sshtest.git のうち、 github.comが該当。
IdentityFile: 当該ホストへの接続に使用したい秘密鍵のフルパス
User: HostName: git@github.com:ysknsid25/sshtest.git のうち、 gitが該当。

ここまでを設定したうえで、ssh -Tコマンドを今度は鍵を指定せずに叩いてみる

ssh -T git@github.com

すると…?

Enter passphrase for key 'C:\Users\user\.ssh\id_rsa_sshtest': 
Hi ysknsid25! You've successfully authenticated, but GitHub does not provide shell access.

鍵を指定せずとも接続ができるようになりましたね!

毎回パスフレーズを求められないように設定を加えていく

鍵の指定を省略できるようにはなりましたが、相変わらずパスフレーズの入力を求められている模様。

うっとうしいので、なんとかしたいです。

そこで使うのがssh-agentです。以下のコマンドを叩きます。

ssh-add C:\Users\user\.ssh\id_rsa_sshtest

このとき、エラーなく実行できた人はラッキーです。次の手順7へ進んでください。

しかし、ほとんどの人が以下のようなエラーに出くわすと思います。

Error connecting to agent: No such file or directory

これは、ssh-agentというサービスが動いてないことに起因しています。

ssh-agentがPC起動時に自動で立ち上がるように設定していく

「タスクマネージャー」>「サービス」>「サービス管理ツール」を選択

開いた画面で「OpenSSH Authentication Agent」を探してみると、「状態」が「停止」になっていると思います。

(私はすでに設定済みのため、実行中ですが…)

上の画面の 「OpenSSH Authentication Agent」 を選択した状態で右クリックし、「スタートアップの種類」を「自動」にします。

その後、「適用」>「OK」を押下します。

あとは「状態」が「停止」であれば、左の赤丸部分に「サービスの開始」が表示されているはずなのでクリックし、開始させます。

状態が「実行中」になればOKです。

再度ssh-agentに鍵を登録していきます

ssh-add C:\Users\user\.ssh\id_rsa_sshtest

すると、今度はエラーが表示されず、パスフレーズの入力を求められるはずです。

言われた通り入力してあげます。

Enter passphrase for C:\Users\user\.ssh\id_rsa_sshtest:
Identity added: C:\Users\user\.ssh\id_rsa_sshtest (user@DESKTOP-TGTG3QG)

すると、上のように「Identity added」に続けて、秘密鍵のフルパスが表示されます。

これでパスフレーズをssh-agentが覚えてくれました。

ではパスフレーズが省略できるか確認

ssh -T git@github.com

パスフレーズを聞かれることなく、以下のメッセージが表示されればOKです。

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

gitがssh-agentを利用するように設定する

ここまで出来れば、sshでの接続はばっちりです。

いよいよこの設定をgitに適用します。

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

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

これ、何をしているかというと、Gitの設定を、WindowsのOpenSSHを見に行くように変更しています。

この設定ができてないと、先ほど設定したはずのパスフレーズを聞かれたり、vscodeからpushしようとしたときに、id_rsa.pubというデフォルトの名前以外で鍵を作った場合の C:\Users\user/.ssh/config を見に行ってくれないため、エラーが発生します。

git で push

さあ、仕上げに入りましょう!

ここまでくれば、後はなんてことないです。

親の顔よりみたコマンドを叩いていきます。

git remote add origin git@github.com:ysknsid25/sshtest.git
git push -u origin master

無事にpushできました。

また、適当にファイルを変更し、コミット後、今度はvscodeからpushします。

vscodeで実行しても、エラーにならず実行できました。

Kanon

以上です。おつかれさまでした!

直近の推し5選!

1

みなさんこんばんは。 こんにちは、Kanon です。今回は… しめさば先生の『君は僕の後悔』の感想記事です。 しめさば先生はこれまでにも『ひげを剃る。そして女子高生を拾う』や『きみは本当に僕の天使なの ...

2

リンク あらすじ 人生オール80点。 そんな俺が託されたのは、元トップアイドル・香澄ミルの世話だった。 ファン対応がしみつきなかなかクラスに馴染めないミル。 そんな彼女に頼られるうち、俺たちは図らずも ...

3

リンク 二丸先生の他の作品はこちら あらすじ 記憶喪失の湖西廻の前に現れたのは、清純で素朴な美少女、丹沢白雪。 「──私、廻くんと恋人だったの」  白雪はそう言って顔を赤らめ、廻の頬にキスをする。   ...

4

リンク あらすじ その夜、僕の青春は〈炎〉とともに産声をあげた――  スマホを忘れて夜の学校に忍び込んだ在原有葉(ありはらあるは)は、屋上を照らす奇妙な光に気づく。そこで出会ったのは、闇夜の中で燃え上 ...

5

こんにちは、Kanon です。今回は… しめさば先生の『きみは本当に僕の天使なのか』の感想記事です。 表紙とタイトルを見るに幻想的な恋の話のように思えるのですが、実はタイトルはそんな幻のようなものでは ...

-Git, Tech, インフラ
-, , , , , , ,