Configura o SSH passthrough para o gitea #11
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "gitea-ssh-passthrough"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Com o gitea está a correr num container, o acesso via ssh era feito pelo porto 2222 para não entrar em conflito com o ssh do servidor anfitrião.
Este PR configura o passthrough no anfitrião para que qualquer ligação feita ao utilizador git seja redireccionado para o container. Para isto funcionar, é preciso duas coisas:
Primeiro, é preciso passar as chaves públicas do gitea para o anfitrião para que utilizadores do gitea consigam autenticar no anfitrião. Isto foi feito com a directiva
AuthorizedKeysCommand
no/etc/ssh/sshd_config
do anfitrião, que permite especificar um comando que imprime no stdout as chaves permitidas, em vez de apenas estarem estaticamente configuradas no ficheiro ~/.ssh/authorized_keys. O comando em questão é umlxc exec gitea -- gitea keys ...
. Este comando gera um conjunto de chaves autorizadas restritas ao comando/usr/local/bin/gitea
.Segundo, é preciso configurar um shim no anfitrião para que o tal comando
/usr/local/bin/gitea
funcione. Este shim limita-se a chamar exactamente o mesmo comando mas no contexto do container lxc.Bati nalguns problemas enquanto fiz isto:
Primeiro, o
AuthorizedKeysCommand
corre com o utilizador especificado emAuthorizedKeysCommandUser
. Especifiqueigit
aqui, e adicionei-o ao grupolxd
para poder fazer olxc exec
, mas um bug no openssh faz com que os grupos não sejam inicializados e o comando falhe. Para dar a volta a isto, para já, o comando está a correr comoroot
. O bug já foi corrigido, quando sair a nova LTS 22.04 talvez possamos meter isto direito.Segundo, para facilitar a gestão do sshd_config, ia criar um
/etc/ssh/sshd_config.d/git.conf
com as directivasAuthorizedKeys*
, mas estas têm de estar por baixo de umMatch User git
para só se aplicarem a este utilizador, e havia um bug no openssh que ignora qualquer directivaMatch
em ficheiros incluídos. Para dar a volta a isto, adicionei as directivas directamente no ficheiro principal/etc/ssh/sshd_config
. Isto implicou copiar na íntegra este ficheiro para o ansible, porque estar a fazer com que o ansible apenas gerisse 3 linhas no fim do ficheiro era mais trabalho que solução. A única alteração é o acrescentar de três linhas no fim do ficheiro, o resto copiei do servidor.Terceiro, ao usar esta configuração de passthrough, o ssh embutido no gitea nem sequer é usado, mas ao tentar desligá-lo o gitea deixou de funcionar (tentava escrever os ficheiros de configuração de ssh nativos em sítios sem permissão). Deixei-o ligado mas desliguei o port mapping. Tentei também mudar o SSH_PORT para 22 para aparecer bem no interface, mas o
gitea_ssh_port
muda tanto o SSH_PORT como oSSH_LISTEN_PORT
, e ao mudar este segundo o arranque falhava por falta de permissões para usar o porto 22 (o gitea corre sem privilégios). Para dar a volta a isto, meti umas configurações extra na secçãogitea_extra_config
. O mesmo para oSSH_USER
.Parece-me estar tudo a funcionar,
3c9dcacaeb
to1c13397fcc
1c13397fcc
to256f4066d1