Ho sbagliato, esco in .bashrc


27

Ho inserito "exit" nel mio file .bashrc. Non ho accesso fisico alla macchina, quindi per connettermi ad essa uso ssh. Non ho i privilegi di root. Ogni volta che mi collego al server, la connessione si chiude automaticamente.

Finora ho provato:

  • Sovrascrivere .bashrc con scp e sftp. La connessione si chiude prima che io possa fare qualsiasi cosa.
  • Utilizzo di alcuni diversi programmi della GUI per accedere a ssh (la connessione si chiude)
  • Sovrascrivere il file con ftp. (impossibile usare ftp)
  • Dal mio computer di casa
    • $ ssh host "bash --noprofile --norc" (la connessione si chiude)
    • $ ssh host "mv .bashrc bashrc_temp" (la connessione si chiude)
    • $ ssh host "rm .bashrc" (stessa cosa)
    • $ ssh host -t (la connessione si chiude)

C'è qualcosa che posso fare per disabilitare .bashrc o forse sovrascrivere il file prima che .bashrc venga fornito?

AGGIORNARE

@ Ring0

Ho provato il tuo suggerimento, ma senza fortuna. Il file bashrc viene ancora eseguito per primo.

Un'altra cosa che ho provato è stato l'accesso con un altro account e sudo modificando il .bashrc, ma non ho i privilegi di sudo su questo account.

Immagino che contatterò l'amministratore.

MODIFICARE

@shellholic

Non ci posso credere, ma questo approccio ha funzionato! Anche se "exit" si verifica nelle prime righe (composte solo da alcuni blocchi if e istruzioni di esportazione ) nel file .bashrc, sono comunque riuscito a interromperlo con successo in Ctrl-c entro venti tentativi (sono stati necessari circa 3 minuti). Ho rimosso la linea offensiva in .bashrc e tutto è di nuovo funzionante.


2
darwinawards.com dovresti avere (temporaneamente) un accesso come utente che può sovrascrivere il tuo file .bashrc o cambiare la tua shell predefinita in qualcos'altro. "Chiedi al tuo amministratore di sistema" come dice MS.

2
man 8 sshddice che è 9. Runs user's shell or command.il nono passo ...: - /

1
scp smetterà anche di funzionare perché la shell viene ancora aperta e viene chiamato .bashrc
Aleksandr Levchuk

Cordiali saluti il ​​motivo per cui la maggior parte di questi suggerimenti non funziona è perché ssh esegue qualsiasi comando passandolo come argomento alla shell dell'utente. Cerca execve in session.c. Non è possibile modificare / aggiungere / eliminare gli argomenti di questa chiamata alla shell dell'utente.
Mark Wagner,

Risposte:


37

puoi provare a interrompere (ctrl + C) prima che la parte di uscita .bashrcvenga eseguita.

Ho provato aggiungendo quanto segue in cima alla bashrc di un testus, funziona, è solo una questione di tempismo. Molto facile nel mio caso:

sleep 3
echo "Too late... bye"
exit 0

8
+1, perché è probabilmente l'unica soluzione che non richiede aiuto dall'amministratore di sistema. Tuttavia, è necessaria molta fortuna per avere il tempismo corretto (l'host ssh -v potrebbe aiutare un po ').
JooMing,

In realtà il ctrl + C ha funzionato. Anche senza dormire. Ho inserito "exit" nel mio bashrc e sono stato in grado di recuperare con un rapido ctrl + C dopo circa 4 tentativi. Per favore, modifica la risposta in modo che io possa cambiare "-1" in "+1".
Aleksandr Levchuk,

@Aleksandr Levchuk done
shellholic

4
Apprezzo molto la combinazione di pateticamente ridicola bassa tecnologia e brutale efficacia qui.
unixtippse,

1
Sto ridendo come un matto, che fretta quando finalmente funziona. Grazie @JooMing, ho provato tutti i metodi da qui serverfault.com/questions/94503/… anche quello premendo Ctrl + C, ma ha funzionato solo dopo aver aggiunto l'opzione -v!
mxmlnkn,

12

Sono riuscito a rovinare anche il mio file .bashrc su un nuovo cluster a cui ho avuto accesso di prova. Non volendo sembrare un noob, l'ultima cosa che volevo fare era chiedere aiuto agli amministratori e non riuscivo a far funzionare un ^ + C tempestivo.
Ciò che ha funzionato, tuttavia, è stato inviare un comando 'rm' come argomento finale a ssh. vale a dire

ssh -tv user@host rm .bashrc

Non sono riuscito a far funzionare un comando 'mv' (provato prima senza -t), quindi penso che l'opzione -t debba averlo fatto, ma puoi testarlo se vuoi. Ora ho recuperato dal file .bashrc ~ (creato da Vim) tutto tranne la linea truffa in questione e tutto è giusto nel mondo! = D


2
ssh -tv user@home mv .bashrc .bashrc-oldha funzionato per me
Code Commander il

3

Se riesci ad accedere come un altro utente, prova questo:

su user -s /bin/sh

Avrai bisogno della tua password, ovviamente.


1
si potrebbe provare una shell diversa, non basata su sh: kshoppurecsh
Hubert Kario,

3

Se ricordo alcune brutte esperienze che ho avuto in questo modo, ssh, scp, sftp sembrano eseguire i file di inizializzazione.

Il mio suggerimento è di utilizzare FTP semplice e quindi eliminare o rinominare il file non valido nella riga di comando FTP dopo aver effettuato l'accesso. Presumo che il sistema consentirà l'accesso FTP. In tal caso, assicurarsi di modificare la password (in modo sicuro) al termine della riparazione.


Filezilla ha funzionato perfettamente per questo. Devi solo selezionare il menu "Server" e selezionare l'impostazione "Forza mostrare i file nascosti".
Danny G,

1

Da man ssh( OpenSSH_5.6p1almeno, non sono sicuro di quando è stato aggiunto),

~/.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.

..che significa che è possibile creare ~/.ssh/rccontenente quanto segue:

mv ~/.bashrc ~/bak.bashrc

Quindi, quando sshentri, la base problematica verrà spostata, prima che la tua shell di login venga avviata - puoi ovviamente risolvere il problema bak.bashrce spostarlo di nuovo in posizione


0

Connettiti tramite SCP o SFTP e modifica / rinomina / elimina il tuo file .bashrc in questo modo. Modifica - D'oh, vedo che hai detto che ci hai provato. Oh bene.


0

Ho avuto lo stesso problema e in qualche modo sono stato in grado di risolverlo. Ho usato ssh per accedere al sistema e ho premuto e tenuto premuto Ctrl + c non appena ho effettuato l'accesso al sistema. Quindi, ~ / .bashrc non è stato letto e sono stato in grado di modificarlo.


1
Esatto duplicato della risposta più votata qui
pauska,

0

L'ho trovato funzionante.

Interrompere il boot loader di grub premendo e ... premere di nuovo e per inserire le righe di caricamento di grub, premere di nuovo e per modificare la riga del kernel,

vai alla fine della linea;

aggiungi init = / bin / bash alla fine della riga,

invio per tornare, b per avviare,

aprirà una shell bash, aprirà vim /root/.bashrc e modificherà di conseguenza. esci e ora sarai in grado di accedere



0

Un paio di suggerimenti che hanno funzionato per me da questo thread di Reddit :

ssh you@the.box /bin/bash --noprofile --norc
ssh -t jacksgt@example.com vi ./.bashrc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.