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?


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"

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.


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"

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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.