Entonces, digamos que uno escribió algo en su interior .bashrc
que impide que él (o ella) inicie sesión a través de ssh
(es decir, el inicio de sesión ssh se cierra debido al error en el archivo). ¿Hay alguna forma de que esa persona pueda iniciar sesión sin ejecutarla (o .bashrc
dado que una ejecuta la otra), o de lo contrario eliminar / renombrar / invalidar el archivo?
Suponga que no tiene acceso físico a la máquina, y esta es la única cuenta de usuario con la capacidad de ingresar.
Para referencia: .bash_profile
incluye .bashrc
:
[[ -f ~/.bashrc ]] && . ~/.bashrc
Editar: Cosas que he intentado:
ssh user@host "rm ~/.bashrc"
scp nothing user@host:/RAID/home/tom/.bashrc
ssh user@host "/bin/bash --norc"
Todos dan el error:
/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
[ -z "$PS1" ] && return
al comienzo de ./bashrc. De esta forma, scp dejará de analizar .bashrc después de la primera línea y podrá sobrescribirlo en caso de emergencia.Respuestas:
Creo que tus únicas opciones son:
ssh como otro usuario y su a su cuenta;
use algo como ftp o smbclient, si los servicios relevantes están habilitados en el host;
encuentra una vulnerabilidad abierta en un servicio de red abierto y explótala :).
consigue un administrador para solucionar el problema.
fuente
ssh -t username@hostname /bin/sh
funciona para mi.fuente
.cshrc
/.tcshrc
incluso para shells no interactivos.Tuve el mismo problema y de alguna manera pude resolverlo. Usé ssh para acceder al sistema y presioné y mantuve presionadas las teclas Ctrl + c tan pronto como inicié sesión en el sistema. Entonces, ~ / .bashrc no se leyó y pude modificarlo.
fuente
Utilicé un CVE publicado para ejecutar un comando como root a través de una interfaz web en un software de monitoreo de red que había instalado.
rm /RAID/home/tom/.bashrc
Entonces podría iniciar sesión y svn revertir los cambios que hice.
fuente
Debe a) iniciar bash sin
source
''~/.bashrc
o ''~/.bash_profile
yb) ya que dicho shell no sería un shell de inicio de sesión completo / no tiene tty conectado, forzar ssh para adjuntar un tty :fuente
ls
para convencerte de que estás :). También tenga en cuenta que esto usará undumb
término, por lo que para mí nano no funcionaNo tienes suerte.
Todos los comandos ssh ejecutan su shell de inicio de sesión.
ssh $COMMAND
corre$SHELL -c $COMMAND
,scp
corre$SHELL -c /path/to/sftp-server
,ssh
simplemente ejecuta tu caparazón.fuente
Ninguna de las respuestas anteriores puede omitir el shell de inicio de sesión de ssh. Puede pasar una línea de comando completa, por lo que ejecuta el shell remoto para procesar el comando y establecer el entorno de trabajo para el comando. Para eso están los shells y es la forma de Unix. Tendría todo tipo de problemas de compatibilidad si intentara ejecutar algo sin un shell. Del mismo modo, probar un control-C debería hacer lo mismo que llamar a exit, que es el comportamiento que está tratando de evitar. Si bash continúa es un error. ¿Por qué la gente sigue diciendo que la página de manual dice algo diferente? Hay que citarla porque no dice nada de eso en mi página de manual.
¡Además, en la mayoría de los sistemas Linux, especificar / bin / sh NO HACE NADA ya que esto es solo un enlace simbólico para bash!
¿Quieres probar? Agregue declaraciones "echo" a usted .bashrc y .profile y vea cuál se ejecuta. Yo hice. Aquí están los resultados.
ssh user@host
ejecutará .bash_profilessh user@host /bin/bash
ejecutará .bashrc, pero cree que no es interactivo (sin solicitud).ssh -t user@host /bin/bash
ejecuta .bashrc dos veces ... una vez al iniciar sesión, una vez para el comando pasado, por lo que especificar CUALQUIER shell siempre se ejecutará primero.ssh -T user@host
es lo mismo que no especificar -T o -t en absoluto.Ahora, si te das cuenta, MI sistema no ejecuta ambos archivos, solo uno u otro. Pero el póster original tiene una línea en .bash_profile ejecutando .bashrc, por lo que .bashrc siempre se ejecutará sin importar qué. ¡No debería haber puesto esa línea allí! Si esa línea no existiera, no habría tenido un problema.
Tendrá que encontrar otra forma de entrar o encontrar un administrador. Para eso están los administradores.
fuente
/bin/sh
lo hizo llegar a ejecutar en primer lugar, que podría ayudar, porque Bash no se carga~/.bashrc
cuando se invoca comosh
. Esta respuesta es un superconjunto de su otra respuesta, así que elimine la otra.Algo como:
lo que parece funcionar, pero tenga en cuenta que PS1 no está configurado, por lo que escribirá comandos sin un aviso.
Esto tiene la ventaja de no ser destructivo.
fuente
tratar
^ C hay control-v luego c
fuente
fuente
Mashing ctrl-C funciona siempre que pueda obtener un ctrl-C antes de que el .bashrc salga. Desafortunadamente, esto puede ser difícil de hacer si
exit
es temprano en el .bashrc.Puede poner un ctrl-C lo antes posible al conectarlo directamente a ssh:
Tenga en cuenta que
^C
se escribe como ctrl-V seguido de ctrl-C.Esto canaliza un solo ctrl-C seguido de una entrada desde el terminal de control, mientras
-tt
obliga a asignar un psuedo-terminal. En total, esto le proporciona un shell (algo malformado) en la máquina remota mientras omite la mayor cantidad de .bashrc posible.fuente
Puede intentar sobrescribir el
.bash_profile
archivo vacío con elscp
comando. Por lo que busqué en Google, scp usa un inicio de sesión no interactivo que no lee.bash_profile
.fuente
También puede simplemente eliminar el archivo bashrc:
fuente
Si su sistema está configurado normalmente, .bash_profile no se ejecutará para un shell no interactivo (como ejecutar un comando).
Como usted indica que el problema está en el archivo .bash_profile, intente quitarlo:
fuente
No corte y corra, cambie
user
yhost
luego editeletmein
y guarde como.bashrc
fuente
Felicitaciones a user60069, funcionó para mí, pero utilizo el archivo de inicio específico de shell .bashrc, por lo que iniciar sesión con / bin / sh funcionó para mí.
Sin embargo, si se encuentra en la situación de "no hay suerte", ofrezco esta solución, basada en las soluciones de user60069 y Dennis W:
Dennis W ofreció la opción --norc, que alguien dijo que no funcionaba para ellos.
Ejecute "man bash" o "man (su shell)" para ver las opciones para deshabilitar los archivos de inicio. Solo necesita usar un shell abominable durante el tiempo necesario para solucionar el problema.
fuente
Otra forma de iniciar sesión en el servidor es sin perfil, encuentre el siguiente comando
ssh -t user@host bash --noprofile
Para AWS usando el archivo pem y ningún otro usuario
ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile
¡Espero que esto ayude!
fuente
De las sugerencias y respuestas dadas anteriormente, diría que no son los archivos .bashrc o .bash_profile. También la página de manual de ssh dice que si especifica un comando para ejecutar, sus archivos de perfil no se leerán.
Sugeriría intentar ejecutar un shell de inicio de sesión diferente (ksh? Csh? Sh?) Desde la ruta absoluta; Además, tenga en cuenta que podría ser un problema totalmente diferente (¿cuota? ¿Ejecutar y leer permiso en su directorio de inicio?), por lo que un enfoque secundario sería mejor. ¿Puedes pedirle a otro usuario que haga un
ls -la $YOUR_HOME_DIR
correo y te envíe el resultado?fuente