1. Descrição do Problema & Contexto
Durante a execução do pipeline ./c2f project:update-all [REDACTED]-local --confirmar-remoto, as etapas 1 a 5 concluem com sucesso, mas a etapa 6/8 (Regenerando CSS derivado) falha com o seguinte erro retornado pelo SSH:
▶ 6/8 Regenerando CSS derivado ([REDACTED]-local)
──────────────────────────────────────────────────
projeto: [REDACTED]-local | local: true | url: https://[REDACTED].local/
transporte: ssh [REDACTED]:22[REDACTED]
comando remoto: [REDACTED]=yes -o ConnectTimeout=15 -p 22 "[REDACTED]" "cd '[REDACTED] && sudo -u '[REDACTED]' 'sh' '-c' 'if [ -x ./c2f ]; then '''./c2f''' '''css:rebuild'''; elif command -v c2f >/dev/null 2>&1; then'''c2f''' '''css:rebuild'''; else '''php''' '''controladores/agents/arquitetura/css-regenerar.php''' '''--gestor=.'''; fi'"
✖ ERROR bash: line 1: cd: [REDACTED] Permission denied
✖ ERROR A regeneração remota do CSS falhou para '[REDACTED]-local' (código 1).Causa Raiz Mapeada
-
O BATCH-172 corrigiu o encapsulamento de
cdsobsudo -unos scripts shell (project_transport_remote_execemproject-transport.sh), o que permitiu às etapas 2/8 e 5/8 executarem normalmente no tenant HestiaCP ([REDACTED]). -
Entretanto, a etapa 6/8 é disparada pelo comando PHP
CssRebuildCommand, que utiliza a classeConn2Flow\Cli\Support\SshRemoteTransport(cli/src/Support/SshRemoteTransport.php). -
No método
buildRemoteCommand(), o comando ainda concatenacd $directory &&antes desudo -u $runAs:if ($this->runAs !== null) { $remote = 'sudo -u ' . $this->posixQuote($this->runAs) . ' ' . $remote; } $directory = $workingDirectory ?? $this->cliWorkingDirectory(); $remote = 'cd ' . $this->posixQuote($directory) . ' && ' . $remote; -
O mesmo padrão de
cdprévio desprotegido existe emAuthCookieCommand::generateViaSsh()(cli/src/Commands/AuthCookieCommand.php:276). -
Como o usuário [REDACTED] (
otavio) não tem permissão para navegar diretamente no diretório do tenant (750pertencente a[REDACTED]), o comando falha comcd: Permission denied.
2. Escopo Técnico de Alterações
Módulo 1: SshRemoteTransport (cli/src/Support/SshRemoteTransport.php)
-
No método
buildRemoteCommand():-
Quando
runAsestiver definido, encapsular a mudança de diretório (cd "$directory") e o comando$remotejuntos sobsudo -u $runAs sh -c "cd ... && ...". -
Quando
runAsfor nulo, manter a execução diretacd "$directory" && $remote.
-
Módulo 2: AuthCookieCommand (cli/src/Commands/AuthCookieCommand.php)
-
No método
generateViaSsh():-
Quando
ssh['runAs']estiver definido, encapsular ocde a execução do PHP gerador de cookie sobsudo -u $runAs sh -c ....
-
Módulo 3: Testes Automatizados
-
Em
tests/Unit/PHP/CssAuditSshReq052Test.php(ou teste unitário dedicado de transporte):-
Adicionar teste garantindo que
SshRemoteTransport::buildRemoteCommand()comrunAsencapsula ocddentro dosudo -u ... sh -c.
-
3. Critérios de Validação e Aceite
-
Execução Completa de 8/8 sem Erros:
-
A execução de
./c2f project:update-all [REDACTED]-local --confirmar-remotopassa pela etapa 6/8 (Regenerando CSS derivado) com sucesso, sem avisos decd: Permission denied.
-
-
Suíte de Testes 100% Verde:
-
PHPUnit 100% passando.
-
-
Evidências Registradas:
-
Registrar evidências em
sdd/implementation/BATCH-173.md,BATCH-INDEX.mdeCURRENT.md.
-