Ignorar ~ / .profile no login remoto em um servidor Linux

32

Existe uma maneira de ignorar ou impedir a execução ~/.profileao fazer login em um servidor Linux remoto usando ssh ou putty?

Andrew Hampton
fonte
Por que você quer fazer isso? Por que não apenas editar os valores no arquivo? (É o seu perfil, depois de tudo.)
Telêmaco
7
Isso é útil, por exemplo, se alguém errou no arquivo .profile e você não tem acesso direto ao sistema :)
monkey_p
Essa é exatamente a situação que eu me encontrei em monkey_p
Andrew Hampton

Respostas:

30

Para o bash:

$ ssh hostname "bash --noprofile"
massysett
fonte
6
Você também precisará da -topção, eu acho.
grawity
2
ssh -t nome do host "bash --noprofile". Se -t não estava lá, eu estava recebendo o erro "padrão em deve ser um tty".
nitins
14

Se você estiver olhando para desativar todos os scripts de login, você pode usar o --noprofilesinalizador para desativar /etc/profile, ~/.profileetc. e --norcpara desativar ~/.bashrcassim:

$ ssh 127.0.0.1 "bash --noprofile --norc"

Lembre-se de que você também pode iniciar um shell alternativo, se houver um disponível. Eu tive que usar isso depois de estragar em chsh:

$ ssh 127.0.0.1 sh

Isso provavelmente o levará a um shell em branco (sem aviso), portanto, lscertifique-se de que esteja funcionando.

Jack M.
fonte
4

Se sua máquina de destino estiver em um shell bash:

user@host:/$ ssh hostname "bash --noprofile"

Como alternativa, se houver outro perfil que você deseja usar

user@host:/$ ssh hostname "bash --noprofile; source ~/.other_profile"
Nick Stinemates
fonte
1

Além disso, tente usar um programa FTP como o WinSCP para excluir o arquivo de login incorreto. Isso irá descartá-lo, mas pelo menos você deve conseguir fazer login no shell padrão

Sphiros O'Kelli
fonte
ou talvez apenas renomeá-lo.
jezmck
1

Como outros já mencionaram, executar o com o --noprofilesinalizador quando você inicia a conexão funcionará, embora se você estiver usando um shell diferente, isso pode ou não ser uma opção.

Uma alternativa seria fazer com que o script de perfil detecta uma conexão SSH e se comporte de acordo. Como as conexões SSH normalmente definem um número de variáveis ​​de ambiente, isso pode ser facilmente verificado. Adicionar algo como as seguintes linhas ao início do seu perfil deve ser suficiente:

if [ "$SSH_CONNECTION" != "" ]; then
  echo Logging in with ssh
  return
else
  echo Logging in with something that is not ssh
fi

# rest of your profile goes here

Ele returnignorará o restante do script se a $SSH_CONNECTIONvariável de ambiente estiver definida, que normalmente seria criada sempre que uma conexão SSH for iniciada. Caso contrário, o perfil será executado normalmente.

Observe que isso ignorará apenas o script de perfil afetado. Todos os outros scripts de perfil (por exemplo /etc/profile:) ainda seriam processados, a menos que você os modifique da mesma forma.

goldPseudo
fonte