Q - Хочу создать Git-сервер на бесплатном уровне GCP - Часть прокси SSH с Nginx -

5 min

language: ja bn en es hi pt ru zh-cn zh-tw

Привет, я неумеха.
Это продолжение "Ха".

Невозможно выполнить Push по SSH в текущем состоянии

Текущая схема
Сторона клиента - VPS VPN srv + Nginx proxy srv - GCP Gitea
Я хочу, чтобы SSH проходил через VPS к GCP таким образом.

Ну, я думал, что делать, но я решил это.
Я вспомнил прокси stream, который я пытался использовать, когда в прошлом пытался настроить почтовый прокси с Nginx.
По сути, можно легко проксировать протоколы, отличные от HTTP/HTTPS.
Однако в этом случае это образ взаимодействия IP и порта, поэтому проксирование для доменов невозможно.
Тем не менее, будет быстрее, если вы сначала посмотрите на синтаксис.

stream {
    server {
        listen 2222; 
        proxy_pass 10.1.0.6:2222; 
        proxy_timeout 1m;
        proxy_connect_timeout 1s;
    }
}

Этот сервер будет слушать на порту 2222 и принимать соединения, а затем проксировать их на порт 2222 IP-адреса 10.1.0.6.
Причина, по которой это невозможно сделать на уровне домена, более подробно объяснена в этом Issues, так что, если вам интересно, посмотрите.

И что произойдет, если, например, проксировать порт 22?

stream {
    server {
        listen 22; 
        proxy_pass 10.1.0.6:2222; 
    }
}

Да, если вы попытаетесь подключиться по SSH к этому серверу на порту 22, все попытки SSH будут направлены на 10.1.0.6:2222.
Если этот работающий сервер настроен на стандартный порт 22, то SSH-соединение фактически станет невозможным, что нехорошо.
Если это произойдет, есть ли какой-нибудь обходной путь? Но давайте пока оставим это в стороне...

Итак, мне нужно включить прослушивание на порту 2222, поэтому этот сервер на FreeBSD временно открывает порт 2222 с помощью pf.

pass in on wg0 proto tcp from 10.1.0.6 to any port 2222

Таким образом, если IP-адрес 10.1.0.6 не виден злоумышленнику, эта маршрутизация не будет применена, и до порта 2222 не доберутся, если только WireGuard не будет взломан.
Применение настроек

doas pfctl -nf /etc/pf.conf
doas pfctl -f /etc/pf.conf
doas service nginx restart

Тогда и на стороне Gitea

По умолчанию Gitea использует стандартный SSH-порт 22, поэтому в текущем виде это не сработает.
Поэтому отредактируйте файл конфигурации app.ini.

[server]
SSH_DOMAIN = git.mydomain.jp
DOMAIN = git.mydomain.jp
HTTP_PORT = 3000
ROOT_URL = https://git.mydomain.jp/
APP_DATA_PATH = /var/lib/gitea/data
DISABLE_SSH = false
SSH_PORT = 2222

Теперь он будет использовать порт 2222 по умолчанию.
Перезапустите с помощью следующего

sudo service gitea restart
sudo service gitea status

Сделать брандмауэр в GCP очень узким

Это было раздражающе, поэтому я почти все закрыл.
Image

Проверка возможности git push с Gitea

Сначала выполните ssh -T.

$ ssh -T -p 2222 git@git.mydomain.jp
Hi there, haturatu! You've successfully authenticated with the key named x1@artix, but Gitea does not provide shell access.
If this is unexpected, please log in with password and setup Gitea under another user.

Получилось.

Затем попробую создать репозиторий в Gitea.
Image
И затем git push

$ git push -u origin main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 1.30 KiB | 1.30 MiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To ssh://git.mydomain.jp:2222/haturatu/wg-genconf.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

Ура!!!!

В заключение

Если кто-то хочет аккаунт, пожалуйста, свяжитесь со мной, и я создам его для вас.
Конец.

Related Posts