Então, digamos que alguém digitou algo no seu .bashrc
que o impede de fazer login via ssh
(ou seja, o login ssh sai por causa do erro no arquivo). Existe alguma maneira de essa pessoa fazer login sem executá-lo (ou .bashrc
desde que um execute o outro) ou excluir/renomear/invalidar o arquivo?
Suponha que você não tenha acesso físico à máquina e esta seja a única conta de usuário com a capacidade de ssh.
Para referência: .bash_profile
inclui .bashrc
:
[[ -f ~/.bashrc ]] && . ~/.bashrc
Edit: Coisas que eu tentei:
ssh user@host "rm ~/.bashrc"
scp nothing user@host:/RAID/home/tom/.bashrc
ssh user@host "/bin/bash --norc"
Todos dão o erro:
/RAID/home/tom/.bashrc: line 16: /usr/local/bin/file: No such file or directory
/RAID/home/tom/.bashrc: line 16: exec: /usr/local/bin/file: cannot execute: No such file or directory
ssh -t username@hostname /bin/sh
funciona para mim.Eu tive o mesmo problema, e de alguma forma consegui resolver. Eu usei ssh para acessar o sistema e pressionei e segurei Ctrl+c assim que entrei no sistema. Então, ~/.bashrc não foi lido e consegui modificá-lo.
Você precisa a) iniciar o bash sem
source
ou~/.bashrc
e~/.bash_profile
b) já que esse shell não seria um shell de login completo / não tem tty anexado, force o ssh a anexar um tty :Acho que suas únicas opções são:
ssh como outro usuário e su para sua conta;
use algo como ftp ou smbclient, se os serviços relevantes estiverem habilitados no host;
encontre uma vulnerabilidade aberta em um serviço de rede aberta e explore-a :).
peça a um administrador para corrigir o problema.
Usei um CVE publicado para executar um comando como root por meio de uma interface web em um software de monitoramento de rede que havia instalado.
rm /RAID/home/tom/.bashrc
Então eu poderia fazer o login e svn reverter as alterações que fiz.
Você não está com sorte.
Todos os comandos ssh executam seu shell de login.
ssh $COMMAND
runs$SHELL -c $COMMAND
,scp
runs$SHELL -c /path/to/sftp-server
, plainssh
apenas executa seu shell.Nenhuma das respostas acima pode ignorar o shell de login do ssh. Você pode passar uma linha de comando completa e, portanto, ele executa o shell remoto para processar o comando e definir o ambiente de trabalho para o comando. É para isso que servem os shells e é o jeito Unix. Você teria todos os tipos de problemas de compatibilidade se tentasse executar algo sem um shell. Da mesma forma, tentar um control-C deve fazer o mesmo que chamar exit, que é o comportamento que você está tentando evitar. Se o bash continuar, é um bug. Por que as pessoas continuam dizendo que a página de manual diz algo diferente, precisam citá-la porque não diz nada do tipo na minha página de manual.
Além disso, na maioria dos sistemas linux, especificar /bin/sh não faz NADA, pois este é apenas um link simbólico para o bash!
Quer testar? Adicione instruções "echo" a você .bashrc e .profile e veja qual é executado. Eu fiz. Aqui estão os resultados.
ssh user@host
irá executar .bash_profilessh user@host /bin/bash
irá executar .bashrc, mas acha que não é interativo (sem prompt).ssh -t user@host /bin/bash
executa .bashrc duas vezes ... uma vez no login, uma vez para o comando passado, portanto, especificar QUALQUER shell sempre executará o primeiro.ssh -T user@host
é o mesmo que não especificar -T ou -t.Agora, se você notar, MEU sistema não está executando os dois arquivos, apenas um ou outro. Mas o pôster original tem uma linha em .bash_profile executando .bashrc, então .bashrc sempre será executado, não importa o quê. Não deveria ter colocado essa linha lá! Se essa linha não existisse, você não teria um problema.
Você precisará encontrar outra maneira de entrar ou encontrar um administrador. É para isso que servem os administradores.
Algo como:
o que parece funcionar, mas observe que o PS1 não está definido, então você estará digitando comandos sem um prompt.
Isso tem a vantagem de não ser destrutivo.
tentar
^C há controle-v então c