🗂

Windows10でGitサーバーを構築し、SSHで繋ぐ

2022/02/25に公開

はじめに

現在参画中のプロジェクトで今までsvnでソース管理を行っていたのですが、
今回Gitに変えようという話になり、Hyper-V上の仮想環境にGitサーバーを構築することに
なったのが、事の始まりです。
その過程でかなり苦労したため、同じようなことで困っている方の助けになれたら、
というのと自分自身の備忘録として、ここに残しておきます。
もっと簡単な設定方法や、間違いがあるかもしれませんが、ご了承ください。

実行環境

環境 Gitサーバー Gitクライアント
OS Hyper-V上のWindows10 Hyper-V上のWindows10
IPアドレス 192.133.28.100 192.133.28.108
ユーザー名 ServerTest ClientTest

サーバー・クライアント共通設定

  1. Gitのインストール
    下に挙げている参考サイトなど、様々なサイトで紹介されているため、割愛します。

  2. Gitのグローバル設定
    GitBashを管理者として実行し、以下のコマンドを実行する。

# ユーザ設定 任意のemailアドレスとユーザー名
 git config --global user.email "hoge@hoge.co.jp"
  git config --global user.name "hogehoge"
# 日本語名表示設定
  git config --global core.quotepath false

クライアントのみの設定

  1. SSHキーの作成
    GitBashを管理者として実行し、以下のコマンドを実行する。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

秘密鍵と公開鍵(id_rsaとid_ras.pub)ファイルが
C://ユーザー/自分のユーザ/.sshフォルダにできていることを確認する。

  1. サービスからOpenSSH Authentication Agentを自動起動にし、開始する

  2. configファイルを作成する
    以下の内容でC://ユーザー/自分のユーザ/.sshフォルダに作成する

config
# 任意の接続名
host Server
# サーバーのユーザー名
user ServerTest
# サーバーのIPアドレス
hostname 192.133.28.100
# サーバーのSSH接続のポート番号(デフォルトは22)
port 22
# 秘密鍵のパス
identityfile ~/.ssh/id_rsa

サーバーのみの設定

  1. リポジトリの作成
  • C://Program Files/Git/ 以下にベアリポジトリフォルダとノンベアリポジトリフォルダの作成を行う
    今回はノンベアリポジトリをsource、ベアリポジトリをsource.gitというファイル名で作成しました。

それぞれの違いについてはこちらを参考にしました↓
https://www.nekotricolor.com/entry/practice-of-bare-and-non-bare-repository-manage-wordpress-themes-with-git

  • ノンベアリポジトリに対象のソースファイルを置き、GitBashで以下のコマンドを実行する

  • リポジトリの初期化

    フォルダ内に.gitフォルダが作成されています。

  • ファイルの追加
    今回はtest.txtとtest2.txtの2ファイルを追加しました

  • コミット

  • ノンベアリポジトリからベアリポジトリにgit cloneして、更新管理用フォルダを作成する

    source.gitフォルダの中にsourceフォルダの.gitフォルダの中身がcloneされている。

  1. SSHサーバ立ち上げ
  • OpenSSHサーバーをインストール
    アプリと機能のオプション機能から機能の追加を選択し、OpenSSHサーバーをインストールする

コンピューターの管理のサービスからOpenSSHサーバーを自動開始に変更し、開始する

C://ProgramData/sshにキーが作成されている

  • sshd_configの編集
    コマンドプロンプトを管理者として実行し、メモ帳でC://ProgramData/sshd_configを編集する
    以下の項目のコメント(#)を外し、該当項目の設定を変更する
sshd_config
Port 22
SyslogFacility LOCAL0
LogLevel DEBUG
Public Authentication yes
PasswordAuthentication no
PermitUserEnvironment yes
Match Group administrators
	AuthorizedKeyFile .ssh/authorized_keys
  • 環境変数に以下のパスを追加する
    C://Program Files/Git/usr/bin(bash.exeの場所)
    C:\Program Files\Git\mingw64\bin(git-upload-packの場所)

  • OpenSSHサーバーを再起動する
    コンピューターの管理のサービスからOpenSSHサーバーを再起動する

  • クライアントの公開鍵をサーバーに登録する
    C:/ユーザー/ユーザ名/.sshフォルダの直下にauthorized_keysというファイルを作成し、
    クライアントで作成したid_rsa.pubの中身を書き込む

  1. windowsのsshログインシェルをGitbashに変更する

参考にしたサイト↓ このサイトが無ければ詰んでました、、
https://qiita.com/hidao/items/8d77bb9d6a6e75b34ba5

  • Powershellを管理者権限で実行し、以下のコマンドを実行する
Get-Command bash | Format-Table -AutoSize -Wrap

  • 結果で得られたSource欄のパスを入力した以下のコマンドを実行する
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "↑で得られたパス" -PropertyType String -Force

以下のような表示が出れば成功

クライアントからの接続

1.SourceTreeを起動し、Cloneタブの一番上に下記アドレス、保存先のパスに任意の保存先を入力し、クローンボタンを押すことで、クライアントの任意のフォルダにcloneされる。

ssh://Server(configファイルに設定した接続名)/
source.git(サーバーで作成したベアリポジトリ名)

サーバーでコミットしたtest.txtとtest2.txtファイルがcloneされている

参考

Discussion