WindowsにGitサーバを構築する方法|SSH編

社内など、ローカルエリアネットワーク上にあるWindowsマシン上にGitのリモートサーバを構築することで、複数人でのソースコード管理やバージョン管理が容易になります。この記事では、Windows上にGitサーバを構築する手順を解説します。

前提条件

  • Gitサーバ - Windows10
  • クライアント - Windows10
  • Gitサーバ、クライアント共にGitはインストール済み

バージョン

  • Git - 2.32.0.windows.2

Gitサーバのプロトコルには次の4つを使用できます。

  • Local プロトコル
  • SSH プロトコル
  • Git プロトコル
  • HTTP プロトコル

Local プロトコルは本サイトの記事でもよく使っていたディスク上のパスを指定するものです。
本記事はSSH プロトコルの構築手順になります。

参考

クライアント

設定

最低限、次の項目を設定しておきます。

git config --global user.email "<メールアドレス>"
git config --global user.name "<ユーザ名>"

SSH 公開鍵を作成する

  1. Git Bashを起動し、/c/Users/<ユーザー名>ディレクトリに移動する(通常、Git Bashを起動するとこのディレクトリになります)
  2. /c/Users/<ユーザー名>/.sshディレクトリが無い場合は生成する
    mkdir .ssh
    
  3. /c/Users/<ユーザー名>/.sshディレクトリに移動する
    cd .ssh
    
  4. 次のコマンドを実行し、SSH 公開鍵を作成する
    ssh-keygen -t rsa -b 4096 -C "<メールアドレス>"
    
    質問は全てエンターでOK
    成功すると次の2ファイルが生成される
    • id_rsa
    • id_rsa.pub

Git サーバ

GitをC:\Program Files\Gitにインストールしている前提で記載しています。別の場所にインストールしている場合は該当箇所を読み替えてください。
前提条件として、Gitサーバの管理者とするユーザでWindows10にログインします。

設定

サーバ側も最低限、次の項目を設定しておきます。管理者のものなどを設定しましょう。

git config --global user.email "<メールアドレス>"
git config --global user.name "<ユーザ名>"

次のPATHが通っていることを確認します。PATHが無い場合は追加してください。

C:\Program Files\Git\cmd

SSH キーを生成する

  1. Git Bashを管理者として実行するで起動する
  2. /c/Program\ Files/Git/etc/ssh/に移動する
    cd /c/Program\ Files/Git/etc/ssh/
    
  3. 次のコマンドを実行し、SSH キーを作成する
    質問は全てエンターでOK
    ssh-keygen -t rsa -f ssh_host_rsa_key
    ssh-keygen -t ecdsa -f ssh_host_ecdsa_key
    ssh-keygen -t ed25519 -f ssh_host_ed25519_key
    
    Git Bashを管理者として実行していない場合、ここで"permissionエラー"が出ます

SSHサーバを起動する

PowerShell(またはコマンドプロンプト)を管理者として実行するで起動し、次のコマンドを実行してください。

C:\Program Files\Git\usr\bin\sshd.exe

ファイアウォールの設定を聞かれたら「アクセスを許可する」にします。
実行後、タスクマネージャーにsshdが存在することを確認してください。

git-server-sshd

リポジトリの作成

Git サーバのマシンにリモートリポジトリとなるリポジトリ(ベアリポジトリ)を作成します。

  1. 末尾に.gitと付けた任意のディレクトリを作成する
    例) c:\gitrepo\test.git
  2. Git Bashを起動し、作成したディレクトリ内で次のコマンドを実行する
    git init --bare --shared
    

クライアントの公開鍵をサーバに登録する

  1. /c/Users/<ユーザー名>/.sshディレクトリが無い場合は生成する
  2. /c/Users/<ユーザー名>/.sshディレクトリにauthorized_keysという名前のファイルを作成する
  3. authorized_keysにクライアントのid_rsa.pubの内容をコピーする
    /c/Users/<ユーザー名>id_rsa.pubを置いた場合、Git Bashから次のコマンドでコピー可能
    cat id_rsa.pub >> ./.ssh/authorized_keys
    

git clone

クライアントでGitサーバのリポジトリをクローンする手順です。操作は全てGi Bash上で行います。

まず、クライアントで以下を実行しておきます。

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

次のコマンドを実行すると、リポジトリをクローンできます。ユーザ名はGitサーバのユーザ名です。

git clone ssh://<ユーザ名>@<サーバ名><リポジトリのパス>

# 例
git clone ssh://git@git-server/c/gitrepo/test.git

ここで、ユーザ名がサーバマシンのローカルユーザの場合、パスワード入力で

Permission denied, please try again.

となることがあります。その場合は次のようにすればクローンできました。

git clone ssh://<サーバ名>+<ユーザ名>@<サーバ名><リポジトリのパス>

# 例
git clone ssh://git-server+git@git-server/c/gitrepo/test.git
Gitサーバとクラインアントが同一マシンでサーバ名がlocalhostの場合は、Permission deniedが出なかったので注意してください。
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です