Настройка доступа к репозиториям gitea по ssh
Преимуществом подключения по ssh к репозиторию является то что не надо проходить авторизацию по паролю или использовать в адреса в явном виде токен доступа что обеспечивает дополнительную безопасность.
Настройка gitea
Подробная актуальная документация доступна на сайте: Gitea Documentation
- Создать отдельного пользователя git без установки пароля
sudo useradd -m -s /bin/bash git
sudo mkdir -p /home/git/.ssh
sudo touch /home/git/.ssh/authorized_keys
sudo chmod 700 /home/git/.ssh
sudo chmod 600 /home/git/.ssh/authorized_keys
sudo chown -R git:git /home/deniom/.ssh
- Внести изменения в docker compose
ports:
# [...]
- "127.0.0.1:2222:22"
environment:
- USER_UID=1001
- USER_GID=1001
Где USER_UID и USER_GID определить командой
id git
- Если раньше уже запускался gitea и есть репозитории то передать права на папку с данными на нового пользователя командой ниже, вся дальнейшая работа с репозиториями гит будет идти от данного пользователя
sudo chown -R git:git /home/deniom/docker/gitea/data
- Создаем ключ для связи с gitea, и передаем его новому пользователю
sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"
sudo -u git cat /home/git/.ssh/id_rsa.pub | sudo -u git tee -a /home/git/.ssh/authorized_keys
sudo -u git chmod 600 /home/git/.ssh/authorized_keys
- Создаем скрипт для подмены команды SSH
cat <<"EOF" | sudo tee /usr/local/bin/gitea
#!/bin/sh
ssh -p 2222 -o StrictHostKeyChecking=no [email protected] "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
EOF
sudo chmod +x /usr/local/bin/gitea
При помощи данного скрипта будет выполнятся переадресация в контейнер gitea но при этом доступ к самому серверу так же останется по 22 порту. Подробнее в документации gitea.
6. Перезапустить docker контейнер gitea с новыми настройками
7. Добавим новый ключ в интерфейсе gitea. Для этого идем в Профиль -> Ключи SSH -> Добавить ключ
8. Проверим работу (пока только по ip)
git clone [email protected]:Deniom\testrepa.git
Настройка проксирования
Для обращения к gitea по ssh с использованием домена необходимо выполнить проектирование tcp трафика по 22 порту. Для этого будет использован traefik.
Принципе можно проксировать на любой другой порт но тогда ссылки будет иметь вид отличный от стандартного и выглядить так ssh://[email protected]:2222/Deniom/Test.git
- Перенести подключение по ssh на сервере с traefik с 22 порта (см. Изменение порта доступа по SSH)
- Внести изменения в Traefik открыв 22 порт
ports:
- 22:22
- В статическую конфигурацию
traefik.yml
добавить точку входа ssh
entryPoints:
ssh:
address: ":22"
- Изменить динамическую конфигурацию для gitea добавив секцию проксирования tcp
tcp:
routers:
gitea-ssh:
entryPoints:
- ssh
rule: "HostSNI(`*`)"
service: gitea-ssh
services:
gitea-ssh:
loadBalancer:
servers:
- address: 192.168.0.132:22
Секция tcp должна быть отдельно представлена а не встроена в уже существующий http, можно разместить в конце файла.
- Проверка работы по домену
git clone [email protected]:Deniom\testrepa.git
Для доступа из вне необходимо обязательно прокидывать 22 порт на traefik иначе работать нечего не будет, не забываем изменить настройки роутера.
В случае ошибки ssh про атаку в середине как на скрине ниже необходимо очистить файлы в /home/git/.ssh/ и выполнить пункт 4 повторно.