gitteringinユーザーで git-serverをssh経由で Cygwin上に構築してみた

Pocket

gitteringinユーザーで git-serverをssh経由で Cygwin上に構築してみた
gitteringinユーザーでgit-serverをssh経由でCygwin上に構築してみた

はい。

Cygwin上に、どこかで聞いたような、gitterigiinユーザーを作りgit-serverを構築しました。

そして、ssh経由のポトフォワーディングでローカルにgit cloneしたり、git pushしたりしてみました。

まずは、gitをCygwinにインストールする必要があります。

そのためには、apt-cygが必要です。

まだ、apt-cygを持ってない人は、以下のようにしてapt-cygを入手されてください。

$ wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
$ chmod +x apt-cyg

次にapt-cygで、gitをインストールします。

$ apt-cyg install git

.....
Package rsync requires the following packages, installing:
cygwin libiconv2
Package cygwin is already installed, skipping
Package libiconv2 is already installed, skipping
Package rsync installed
Package zlib0 is already installed, skipping
Running postinstall scripts
Package git installed

もし、git.exeがハードリンクが貼れないせいでエラーが出る場合は、以下のようにしてgit.exeにシンボリックリンクを貼ってください。

(Windowsではハードリンクは貼れません)

# git.exe にハードリンクが貼れないというエラーが出るとき
$ cd /usr/bin
$ ln -s git-receive-pack.exe git.exe

で、次にgit-server側のWindowsにgitteringinユーザーでログインし、gitのリポジトリを作成します。

なお、Cygwinではユーザーの追加はできません。

Windowsで、ローカルアカウントgitteringinを作成してください。

$ cd
$ mkdir -p repos/test.git
$ cd repos/test.git
$ git init --bare
Initialized empty Git repository in /home/gitteringin/repos/test.git/

次に、git-server側で、ssh経由のポートフォワーディングを許可し、ssh経由でgit ができるように、/etc/sshd_configを設定します。

この際、Cygwinのコンソールのアイコンを右クリックして、出てくるポップアップメニューから「管理者として実行」を選択する必要があります。

cygwinのコンソールを「管理者として実行」
cygwinのコンソールを「管理者として実行」
$ emacs /etc/sshd_config

/etc/sshd_config

AllowTcpForwarding yes
PermitTunnel yes

今度は、gitクライアント側で、ssh経由でgit-serverに接続するよう設定する必要があります。

ここで、参考にさせていただいたサイトは、以下のサイトです。

git clone 時に秘密鍵を指定する - Qiita

以下のように、git-ssh.sh を作成します。これで、ssh経由でgit接続する際に秘密キーを指定できます。

$ emacs ~/bin/git-ssh.sh
#!/bin/bash

# https://qiita.com/sonots/items/826b90b085f294f93acf

usage_exit() {
    echo "Usage: $0 [-i identity_file] -- [GIT ARGUMENTS]" 1>&2
    exit 1
}

while getopts i:h OPT
do
    case $OPT in
        i) IDENTITY_FILE=$OPTARG
           ;;
        h) usage_exit
           ;;
    esac
done
shift $((OPTIND - 1))

if [ -n "$IDENTITY_FILE" ]; then
    tempfile=$(mktemp --dry-run)
    cat <<EOF > $tempfile
#!/bin/sh
exec ssh -oIdentityFile=${IDENTITY_FILE} "\$@"
EOF
    chmod a+x $tempfile
    GIT_SSH=$tempfile git $@
    rm -f $tempfile
else
    git $@
fi
$ chmod +x ~/bin/git-ssh.sh

では、実際にgit-serverに接続し、git cloneしてみましょう。

$ mkdir -p work/gittest
$ cd work/gittest/
$ pwd
/home/kaba/work/gittest
$ git-ssh.sh -i ~/.ssh/id_rsa -- clone ssh://gitteringin@192.168.1.253/home/gitteringin/repos/test.git
Cloning into 'test'...
Enter passphrase for key '/home/kaba/.ssh/id_rsa':
warning: You appear to have cloned an empty repository.
$ ls
test
$ cd test
$ ls -al
合計 4
drwxr-xr-x+ 1 kaba kaba 0 11月 21 23:39 .
drwxr-xr-x+ 1 kaba kaba 0 11月 21 23:39 ..
drwxr-xr-x+ 1 kaba kaba 0 11月 21 23:39 .git

以上のように、git cloneできました。

何か、git addしたいですね。

ここでは、.gitignoreを作成して、git addしてみます。

$ emacs .gitignore
# .giignore
File Edit Options Buffers Tools Help
.DS_Store
.Rhistory
*~
\#*
*.dvi
*.aux
*.log
*.toc
*.idx
*.ind
*.ilg
*.out
*.blg

git addし、git commitしてみます。

$ git add .gitignore
$ git commit .gitignore -m "initial commit"
[master (root-commit) b1f6d73] initial commit
 1 file changed, 13 insertions(+)
 create mode 100644 .gitignore

無事、git commitできました。

最後にgit pushし、git-server側に反映してみます。

$ git-ssh.sh -i ~/.ssh/id_rsa -- push ssh://gitteringin@1892.168.1.253/home/gitteringin/repos/test.git
Enter passphrase for key '/home/kteru/.ssh/id_rsa':
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 281 bytes | 281.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://192.168.1.253/home/gitteringin/repos/test.git
 * [new branch]      master -> master

というわけで、ギッタリンギン・サーバーができますた(^^;

20171121 参考サイト ありがとうございますOSZ

gitサーバ構築

github - How to install Git for Cygwin? - Stack Overflow
Installing and setting up GIT - (Jamoma Platform) - Jamoma Development
Cygwin - Git をインストール・設定! - mk-mode BLOG
vallog: windows server に cygwin 入れて sshd サーバ立てて git サーバにした話
Thinking megane: WindowsでGit共有リポジトリをさくっと構築
Run Git Daemon bat for msysGit · GitHub
Radengineer's Log: [Windows][Cygwin]新規ユーザを追加する
Cygwin – Create and Add Users · TechTorials
mkgroup
git clone 時に秘密鍵を指定する - Qiita