Omitir ~ / .profile en inicio de sesión remoto en un servidor Linux

32

¿Hay alguna manera de evitar o evitar la ejecución ~/.profileal iniciar sesión en un servidor Linux remoto utilizando ssh o putty?

Andrew Hampton
fuente
Por qué querrías hacer esto? ¿Por qué no simplemente editar los valores en el archivo? (Es su perfil, después de todo.)
Telemachus
77
Esto es útil, por ejemplo, si alguien cagado el archivo .profile y que no tienen acceso directo al sistema :)
monkey_p
Esa es exactamente la situación en la que me encontré en monkey_p
Andrew Hampton

Respuestas:

30

Para bash:

$ ssh hostname "bash --noprofile"
Massysett
fuente
66
También necesitarás la -topción, creo.
Grawity
2
ssh -t hostname "bash --noprofile". Si -t no estaba allí, recibía el error "standard in must be a tty".
nitins
14

Si usted está buscando para desactivar todos los guiones de entrada, se puede utilizar el --noprofileindicador para deshabilitar /etc/profile, ~/.profile, etc., y --norcpara desactivar ~/.bashrceste modo:

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

Tenga en cuenta que también puede lanzar un shell alternativo si hay uno disponible. Tuve que usar esto después de equivocarme en chsh:

$ ssh 127.0.0.1 sh

Esto probablemente lo colocará en un shell en blanco (sin solicitud), así que dele un mensaje lspara asegurarse de que funciona.

Jack M.
fuente
4

Si su máquina de destino está en un shell bash:

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

Alternativamente, si hay otro perfil que desea usar

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

Además, intente utilizar un programa FTP como WinSCP para eliminar el archivo de inicio de sesión erróneo. Esto lo descartará, pero al menos debería poder iniciar sesión en el shell predeterminado

Sphiros O'Kelli
fuente
o tal vez solo renómbralo.
jezmck
1

Como otros han mencionado, ejecutar con la --noprofilebandera cuando inicias la conexión funcionará, aunque si estás usando un shell diferente, esta puede o no ser una opción.

Una alternativa sería hacer que el script de perfil detecte una conexión SSH y se comporte en consecuencia. Dado que las conexiones SSH normalmente establecerán una serie de variables de entorno, esto se puede verificar fácilmente. Debe ser suficiente agregar algo como las siguientes líneas al comienzo de su perfil:

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

El returnomitirá el resto de la secuencia de comandos si el $SSH_CONNECTIONse establece la variable de entorno, que normalmente se crea cada vez que se inicia una conexión SSH. De lo contrario, el perfil se ejecutará normalmente.

Tenga en cuenta que esto solo omitirá el script de perfil afectado. Todos los demás scripts de perfil (p. Ej . /etc/profile:) aún se procesarían a menos que los modifique de manera similar.

goldPseudo
fuente