Установка git-репозитория на роутер Asus WL-500gp V2
26 Сентября 2011

Вместо введения

Предпологается, что у вас на роутере установлена прошивка от Олега и уже настроен ssh-демон, а также установлен менеджер пакетов ipkg.

Если нет, то инструкцию по установке и настройке можно найти здесь.


Установка

Далее мы рассмотрим развертывание git репозитория на роутере Asus WL-500gp V2 с доступом по ssh (авторизация по публичному ключу опциональна).
Будет создан пользователь с именем git и шеллом git-shell (чтобы ограничить пользователя и разрешить использование только git).


1. Установка git

ipkg install git

Менеджер пакетов установит все необходимые утилиты.


2 Создание пользователя под репозитории.

Перейдите к пункту 2.1 или 2.2 в зависимости от желаемого способа авторизации.


2.1 Авторизацией с помощью пароля.

Для создания можно воспользоваться утилитой adduser (ipkg install adduser)

adduser -h /opt/home/git -s /opt/bin/git-shell git

Где,
/opt/home/git - домашняя директория
/opt/bin/git-shell - шелл для нашего пользователя


2.2. Авторизацией с помощью публичного ключа.

(С возможностью создания публичного SSH-ключа можно ознакомиться здесь)

Для авторизироваться с помощью публичного ключа, к комманде adduser должен быть добавлен ключ -D (Do not assign a password).

adduser -D -h /opt/home/git -s /opt/bin/git-shell git

Создадим файл authorized_keys в котором будут находиться публичные ключи:

su git -s /bin/sh
cd ~
mkdir ./.ssh
touch ./.ssh/authorized_keys
exit

Советую не пользоваться nano (у меня побило ключ), а скопировать файл ключа со своего компьютера и затем добавить его в authorized_keys, например, так:

scp id_rsa.pub admin@192.168.0.1:/opt/home/git/

Затем в роутере от админа:

cat /opt/home/git/id_rsa.pub >> /opt/home/git/.ssh/authorized_keys
rm /opt/home/git/id_rsa.pub

Если при авторизации вы получили ошибку server refused our key, возможно ключ записан неправильно или система не может запустить шелл для данного пользователя (git-shell требует некоторых настроек, см. ниже). Подробнее об ошибке можно узнать из логов:

cat /tmp/syslog.log | grep dropbear | tail

3. Настройка git-shell.

Создадим директорию git-shell-commands и установим права на чтение и выполнение (например, 755).
mkdir /opt/home/git/git-shell-commands
chmod 0755 /opt/home/git/git-shell-commands

Если не создать эту директорию или не установить правильно права, git-shell будет выдавать ошибку:

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.

Но это еще не все, если вы сейчас попробуете подключиться через ssh под пользователем git, то вам это не удасться, а в логах вы увидите

'git' has invalid shell, rejected

Чтобы это исправить нужно добавить git-shell в список правильных (valid) шеллов. Создадим файл /etc/shells (если не создан) и отредактируем его следующим образом:

/bin/sh
/sbin/nologin
/opt/bin/git-shell

Напомню, что для того чтобы изменения в файловой системе роутера сохранились и не пропали после перезагрузки, нужно выполнить следующие команды

flashfs save && flashfs commit && flashfs enable

4. Создание репозитория.

Переключимся на пользователя git

su git -s /bin/sh

и создадим репозиторий

cd ~
mkdir ./ourproject.git
cd ./ourproject.git
git --bare init

Это всё.


Теперь можно "толкнуть" изменения:

git remote add origin ssh://git@192.168.1.1/~/ourproject.git
git push origin master

Клонирование репозитория:

git clone ssh://git@192.168.1.1/opt/home/git/ourproject.git
или
git clone ssh://git@192.168.1.1/~/ourproject.git
Имя:
Эл. почта:
Включите картинки обновить
Код с картинки:
Авторизация
Логин: Пароль: