Faça login sem executar bash_profile ou bashrc

66

Digamos que digamos algo em seu .bashrc que o impeça de fazer login via ssh (ou seja, o login do ssh é encerrado devido ao erro no arquivo). Existe alguma maneira que a pessoa possa logar sem executá-lo (ou .bashrc desde que o outro execute o outro), ou então excluir / renomear / invalidar o arquivo?

Suponha que você não tenha acesso físico à máquina, e esta é a única conta de usuário com capacidade para ssh.

Para referência: .bash_profile inclui .bashrc :

[[ -f ~/.bashrc ]] && . ~/.bashrc

Edit: coisas que 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
    
por Tom Ritter 15.12.2009 / 12:03

17 respostas

18

Eu acho que suas únicas opções são:

  • ssh como outro usuário e su na 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.

por 15.12.2009 / 14:32
98

ssh -t username@hostname /bin/sh funciona para mim.

    
por 12.11.2010 / 14:22
28

Eu tive o mesmo problema e, de alguma forma, consegui resolvê-lo. Eu usei o ssh para acessar o sistema e pressionei e segurei Ctrl + c assim que entrei no sistema. Então, ~ / .bashrc não foi lido, e eu pude modificá-lo.

    
por 18.02.2011 / 22:12
20

Eu usei um CVE publicado para executar um comando como root através de uma interface web em um software de monitoramento de rede que eu tinha instalado. rm /RAID/home/tom/.bashrc

Então eu poderia logar e svn reverter as alterações que fiz.

    
por 19.12.2009 / 17:54
11

Você precisa de a) iniciar bash sem source ' ~/.bashrc ou ~/.bash_profile eb) já que esse shell não seria um shell de login completo / não tem < strong> tty anexado, forçar ssh para anexar um tty :

ssh -t user@host bash --norc --noprofile
    
por 17.02.2015 / 12:51
6

Você está sem sorte.

Todos os comandos ssh executam seu shell de login. ssh $COMMAND corre $SHELL -c $COMMAND , scp corre $SHELL -c /path/to/sftp-server , simples ssh apenas executa a sua concha.

    
por 15.12.2009 / 13:29
5

Nenhuma das respostas acima pode ignorar o shell de login do ssh. Você pode passar uma linha de comando completa e, portanto, executa o shell remoto para processar o comando e definir o ambiente de trabalho do comando. Isso é o que as shells são para e é o caminho Unix. Você teria todos os tipos de problemas de compatibilidade se tentasse executar algo sem um shell. Da mesma forma, tentar um controle-C deve fazer o mesmo que chamar exit, que é o comportamento que você está tentando evitar. Se o bash continua sendo um bug. Por que as pessoas continuam dizendo que a página man diz algo diferente, é necessário 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 faz NADA, já que este é apenas um link simbólico para o bash!

Quer testar? Adicione instruções "echo" a você .bashrc e .profile e veja qual delas é executada. Eu fiz. Aqui estão os resultados.

ssh user@host executará .bash_profile ssh user@host /bin/bash 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 em tudo.

Agora, se você perceber, o 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 outro caminho ou encontrar um administrador. É para isso que os administradores são.

    
por 25.07.2015 / 06:52
3

Algo como:

ssh host "/bin/bash --norc"

que parece funcionar, mas note que o PS1 não está configurado, então você estará digitando comandos sem um prompt.

Isso tem a vantagem de ser não destrutivo.

    
por 15.12.2009 / 12:20
2
ssh -t user@host "bash --norc --noprofile -c '/bin/rm .bashrc'"
    
por 09.04.2018 / 17:16
1

tente

echo ^C | ssh <hostname> ' rm .bashrc'

^ C existe control-v então c

    
por 21.02.2013 / 18:18
0

Você pode tentar sobrescrever o .bash_profile com um arquivo vazio usando o comando scp . Pelo que pesquisei, o scp usa um login não interativo que não lê .bash_profile .

    
por 15.12.2009 / 12:22
0

Você também pode simplesmente excluir o arquivo bashrc:

ssh <hostname> rm ~/.bashrc
    
por 15.12.2009 / 12:25
0

Se o seu sistema estiver configurado normalmente, o .bash_profile não será executado para um shell não interativo (como a execução de um comando).

Como você afirma que o problema está no arquivo .bash_profile, tente movê-lo para fora do caminho:

ssh user@host "mv ~/.bash_profile ~/.bash_profile_broken"
    
por 15.12.2009 / 12:36
0

UH='user@host'; ssh $UH 'mv ~/.bashrc ~/letmein'; ssh $UH

Por favor, não o corte e corra, mude user e host , então edite letmein e salve como .bashrc

    
por 16.07.2011 / 23:11
0

Kudos para user60069, funcionou para mim, mas eu uso o arquivo de inicialização específico do shell .bashrc, então o login com / bin / sh funcionou para mim.

No entanto, se você estiver na situação "sem essa sorte", ofereço essa solução com base nas soluções do user60069 e do Dennis W:

ssh -t you@host  /bin/bash --noprofile  --norc

Dennis W ofereceu a opção --norc, que alguém disse que não funcionava para eles.

Execute "man bash" ou "man (your shell)" para opções de desativação dos arquivos de inicialização. Você só precisa usar um shell repugnante pelo tempo que leva para corrigir o problema.

    
por 16.03.2017 / 21:55
0

Outra forma de fazer login no servidor é sem perfil, por favor, ache o comando abaixo: ssh -t user@host bash --noprofile

Para o AWS usando o arquivo pem e nenhum outro usuário do ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile

Espero que isso ajude!

    
por 25.10.2018 / 10:27
-1

Das sugestões e respostas dadas acima, eu diria que não são os arquivos .bashrc ou .bash_profile. Também ssh manpage diz que se você especificar um comando a ser executado, seus arquivos de perfil não serão lidos.

Sugiro tentar executar um shell de login diferente (ksh? csh? sh?) a partir do caminho absoluto; também, cuidado com o fato de que pode ser um problema totalmente diferente (cota? executar e ler permissão em seu diretório pessoal?), portanto, uma abordagem lateral seria melhor. Você pode pedir a outro usuário para fazer um ls -la $YOUR_HOME_DIR e enviar o resultado por e-mail?

    
por 15.12.2009 / 13:34