LoginSignup
1
1

More than 5 years have passed since last update.

GitのリモートリポジトリにSSHで使う時に便利なシェルスクリプト

Posted at

プライベートなコードをVPS上に置く時に書いたシェルスクリプト.4年くらい使ってたやつを少し整理して公開.

前提条件

  • SSH接続でgitを使っている
  • Webインターフェイス入れるの面倒くさい or リポジトリ作るのにブラウザ操作したくない
  • gitリポジトリにアクセスする専用のユーザ(もしくはSSH鍵)を使っている

Webインターフェイス欲しいと思う場合は素直にGithubライクな何かを用意するのが良いです.

(実際には一応Webインターフェイスもインストールしてますが1人開発用なので使っていなかった)

git_wrapper.sh

#!/bin/sh

LOG_FILE="./git_command.log"
GIT_DIR=./git

echo `date` org: $SSH_ORIGINAL_COMMAND >> $LOG_FILE
expr "$SSH_ORIGINAL_COMMAND" : "^git-" > /dev/null || exit

if REPO_NAME=`expr "$SSH_ORIGINAL_COMMAND" : "^git-receive-pack\\s\\+[\"']\\?/\\?\\([A-Za-z0-9_\\./\\-]\\+\\)[\"']$"`; then
  echo repo: $REPO_NAME >> $LOG_FILE
  # create if not exists
  if [ ! -d ./git/$REPO_NAME ]; then
    RET=`mkdir ./git/$REPO_NAME && cd $GIT_DIR/$REPO_NAME && git --bare init --shared && git update-server-info`
    echo $RET >> $LOG_FILE
  fi
fi

CMD=`echo $SSH_ORIGINAL_COMMAND | sed -e 's|^\(git[a-z-]\+\s\+["'\'']\?\)/\?|\1'$GIT_DIR'/|'`
echo exec: $CMD >> $LOG_FILE
sh -c "$CMD"

(おそらく,Linux + OpenSSH専用になってます.sedの細かい挙動とかは環境に合わせて読み替えて下さい)

使い方

上記のgit_wrapper.shを適当な場所に置いて,リモートのユーザの .ssh/authorized_keys に以下のような形式で公開鍵を追加.

command="~/git_wrapper.sh" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqxjaJAnG8l/aS7wA3XEYI3x0hJdZ4Qhol2xDrWfXCI5MnFHhiskkKTfjuGV22hqpD40wOx+YFiGk5RF3c9FbTdn+678YQUXJ4lDM1y9dRZ7jIF/30MiAxGvYyXe/8/oHZ3LuhGlGYPf6nl87ffkW8rIwEiBN1pYtLBUwCeL7XWWKxoECu3KzQlfYxKTEtMqjwm3C++lIod0RDYdoJ04z6qg8sFsk6kSoDwcvsCgPp9LzacbX9ktaaKd1lYq5zUMaXlADwftWv8TbAzEzMdzDfBaRa818FxxORkoH25/WPzEc4y6mWk2UFf1oXE6oMGomYiY7gAydL+fK/g/aaMmmwQ== binzume@kstm.org

repos@example.com:test.git 形式でも ssh://repos@example.com:22/test.git 形式でもリモートの~/git/test.gitにアクセスできます.特に,ssh:// だとポート番号を指定できる代わりにパスの先頭が/になるせいでフルパスを書かなければいけないのが解決します.

あと,存在しないリポジトリにpushすると自動的にリポジトリ作ります.gitコマンド操作だけで気軽にリポジトリ作ってpushできるので便利.

gitコマンド以外は拒否するので気軽に他の人のSSH鍵も追加してましたがチェック適当なので実は任意のコマンド実行できる(知り合いの鍵を追加するくらいなので十分だった)

ただし

最近,GitBucket を仲間内の開発用に使い始めたのでそっちに全部まとめるのを検討しています.なので個人的にはもうこれは不要になりそう.

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1