Me cagué, salgo en .bashrc

27

Puse "exit" en mi archivo .bashrc. No tengo acceso físico a la máquina, así que para conectarme a ella uso ssh. No tengo privilegios de root. Cada vez que me conecto al servidor, la conexión se cierra automáticamente.

Hasta ahora, he intentado:

  • Sobrescribiendo .bashrc con scp y sftp. La conexión se cierra antes de que pueda hacer algo.
  • Usar algunos programas GUI diferentes para acceder a ssh (la conexión se cierra)
  • Sobrescribir el archivo con ftp. (no puede usar ftp)
  • Desde la computadora de mi casa
    • $ ssh host "bash --noprofile --norc" (la conexión se cierra)
    • $ ssh host "mv .bashrc bashrc_temp" (la conexión se cierra)
    • $ ssh host "rm .bashrc" (lo mismo)
    • $ ssh host -t (la conexión se cierra)

¿Hay algo que pueda hacer para deshabilitar .bashrc o tal vez sobrescribir el archivo antes de que se obtenga .bashrc?

ACTUALIZAR

@ ring0

Intenté tu sugerencia, pero no tuve suerte. El archivo bashrc todavía se ejecuta primero.

Otra cosa que intenté fue iniciar sesión con otra cuenta y sudo editando el .bashrc, pero no tengo privilegios de sudo en esta cuenta.

Creo que me pondré en contacto con el administrador.

EDITAR

@shellholic

No puedo creerlo, ¡pero este enfoque funcionó! A pesar de que la "salida" se produce dentro de las primeras líneas (compuesto solamente de unos pocos , si los bloques y exportación declaraciones) en el archivo .bashrc, todavía lograron Ctrl-c interrupción con éxito dentro de los veinte intentos (tomó cerca de 3 minutos). Eliminé la línea ofensiva en el .bashrc y todo está funcionando nuevamente.

camel_space
fuente
2
darwinawards.com debe tener un acceso (temporal) como usuario que puede sobrescribir su archivo .bashrc o cambiar su shell predeterminado a otra cosa. "Pregunte al administrador de su sistema" como dice MS.
2
man 8 sshddice que 9. Runs user's shell or command.como el noveno paso ...: - /
1
scp también dejará de funcionar porque el shell todavía se abre y se llama a .bashrc
Aleksandr Levchuk
Para su información, la mayoría de estas sugerencias no funcionan porque ssh ejecuta cualquier comando pasándolo como argumento al shell del usuario. Busque execve en session.c. No hay forma de modificar / agregar / eliminar los argumentos de esta invocación del shell del usuario.
Mark Wagner

Respuestas:

37

puede intentar abortar (ctrl + C) antes de que .bashrcse ejecute la parte de salida de su .

Intenté agregando lo siguiente en la parte superior del bashrc de un usuario de prueba, funciona, es solo cuestión de tiempo. Muy fácil en mi caso:

sleep 3
echo "Too late... bye"
exit 0
concha
fuente
8
+1, porque probablemente sea la única solución que no requiere la ayuda del administrador del sistema. Sin embargo, se necesita mucha suerte para tener la sincronización correcta (el host ssh -v podría ayudar un poco).
JooMing
En realidad, el ctrl + C funcionó. Incluso sin el sueño. Puse "salir" en mi bashrc y pude recuperarme con un rápido Ctrl + C después de aproximadamente 4 intentos. Por favor, edite la respuesta para que pueda cambiar el "-1" a "+1".
Aleksandr Levchuk
@Aleksandr Levchuk hecho
shellholic
44
Aprecio mucho la combinación de baja tecnología patéticamente ridícula y efectividad brutal aquí.
unixtippse
1
Me río como un loco, esa prisa cuando finalmente funciona. Gracias @JooMing, probé todos los métodos desde aquí serverfault.com/questions/94503/… incluso el que presionó Ctrl + C, ¡pero solo funcionó después de agregar la opción -v!
mxmlnkn
12

También pude estropear mi archivo .bashrc en un nuevo clúster al que he tenido acceso de prueba. Como no quería parecer un novato, lo último que quería hacer era pedir ayuda a los administradores, y no pude conseguir un ^ + C oportuno para trabajar.
Sin embargo, lo que sí funcionó fue enviar un comando 'rm' como argumento final para ssh. es decir

ssh -tv user@host rm .bashrc

No pude hacer funcionar un comando 'mv' (probado antes sin -t), así que creo que la opción -t debe haberlo hecho, pero puede probarlo si lo desea. ¡Ahora he recuperado del archivo .bashrc ~ (creado por vim) todo menos la línea dudosa en cuestión y todo está bien en el mundo! = D

Alex Leach
fuente
2
ssh -tv user@home mv .bashrc .bashrc-oldfuncionó para mí
Code Commander
3

Si puede iniciar sesión como un usuario diferente, intente esto:

su user -s /bin/sh

Necesitará su contraseña, por supuesto.

Cakemox
fuente
1
podrías probar un shell diferente, no basado en sh: kshocsh
Hubert Kario el
3

Si recuerdo algunas malas experiencias que he tenido así, los ssh, scp, sftp parecen ejecutar los archivos de inicialización.

Mi sugerencia es usar FTP simple y luego eliminar o cambiar el nombre del archivo incorrecto en la línea de comando FTP después de iniciar sesión. Supongo que su sistema le permitirá el acceso FTP. En tal caso, asegúrese de cambiar su contraseña (de forma segura) cuando haya terminado la reparación.

mdpc
fuente
Filezilla funcionó perfectamente para esto. Solo tiene que desplegar el menú "Servidor" y seleccionar la configuración "Forzar mostrar archivos ocultos".
Danny G
1

De man ssh( OpenSSH_5.6p1al menos, no estoy seguro de cuándo se agregó),

~/.ssh/rc
        Commands in this file are executed by ssh when the user logs in, just
        before the user's shell (or command) is started.  See the sshd(8) manual
        page for more information.

..lo que significa que puede crear ~/.ssh/rccon lo siguiente:

mv ~/.bashrc ~/bak.bashrc

Entonces cuando tu ssh ingrese, el bashrc problemático se eliminará, antes de que se inicie su shell de inicio de sesión; obviamente, puede arreglarlo bak.bashrcy volver a colocarlo en su lugar

dbr
fuente
0

Conéctese a través de SCP o SFTP y edite / cambie el nombre / elimine su archivo .bashrc de esa manera. Editar - D'oh, veo que dijiste que lo intentaste. Oh bien.

mfinni
fuente
0

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 ingresé al sistema. Entonces, ~ / .bashrc no se leyó y pude modificarlo.

miyashin
fuente
1
Duplicado exacto de la respuesta más votada aquí
pauska
0

Encontré esto funcionando.

Interrumpa el cargador de arranque de grub presionando e ... nuevamente presione e para ingresar a las líneas de carga de grub, nuevamente presione e para editar la línea del núcleo,

ir al final de la línea;

agregue init = / bin / bash al final de la línea,

entrar para volver, b para arrancar,

abrirá un shell bash, abrirá vim /root/.bashrc y editará en consecuencia. salga y ahora podrá iniciar sesión

Haseeb
fuente