Estou usando um sistema GNU/Linux remotamente, via SSH.
Eu adicionei por engano algo em meu $HOME/.bash_profile
scriot que causa um erro. (Para ser específico: adicionei um exec foo
comando em vez de . foo
, aplicado a outro script bash sem permissões de execução, o que resulta em um erro.)
Agora não consigo SSH, SCP ou SFTP em minha máquina: bash, meu shell de login, tenta executar o exec foo
comando, recebe o erro e me expulsa! Não tenho nenhuma outra conta que possa acessar remotamente.
Existe algo que eu possa fazer para restaurar o acesso ao sistema?
Detalhes adicionais:
- A maioria das portas, exceto para SSH, não está disponível, pois a máquina está protegida por um firewall.
- É um sistema Devuan 3 ASCII (~= Debian 10 Beowulf).
Conforme descrito aqui, você pode usar
na verdade, como @JoL sugere, você nem precisa do
--noprofile
, pois quando o ssh executa o bash como apenas outro comando, não é considerado um shell de login. A execuçãossh -t user@host bash
lerá apenas os arquivos RC; e correrssh -t user@host bash --norc
não vai ler nem mesmo aqueles.Tente SSH e execute
sh
em vez debash
, por exemploEm seguida, renomeie (
mv
) ou edite o arquivo quebrado (ex/vi
).Execute
ssh -t host vi .bash_profile
(ou o editor de sua escolha no lugar devi
) e corrija seu arquivo.bash_profile
.(A
-t
opção pode não ser necessária, dependendo de qual editor você escolher.)Se você souber exatamente o que precisa ser corrigido, poderá corrigi-lo de forma não interativa. Por exemplo, algo como
Se apenas
~/.bash_profile
estiver bagunçado, veja as outras respostas para consertá-lo. O restante desta resposta detalha a correção de todos os (outros) scripts de login.Se você tiver o azar de ter
echo Bad luck; exit 42
no início do seu~/.bashrc
e~/.bash_profile
, e tiver/bin/bash
como shell de login essh root@host
também não funcionar, é improvável que você consiga corrigi-lo remotamente. Isso ocorre porque o sshd insistirá em executar seu shell de login e o primeiro/bin/bash
lerá~/.bashrc
ou~/.bash_profile
, e especificarbash --norc --noprofile
é tarde demais, porque a/bin/bash
execução por sshd não possui esses sinalizadores, não importa o que você especifique nassh
linha de comando.Se você estragou tudo apenas
~/.bashrc
, execute isto para corrigi-lo:Se você errou apenas
~/.bash_profile
e/ou~/.profile
e/ou~/.bash_login
, execute isto para consertar:Após a correção, você pode fazer
ssh host
como de costume e limpar os arquivos de script de login em seu editor favorito ou usar scp, sftp ou rsync para transferir arquivos e editá-los localmente.