Bypass ~ / .profile durante l'accesso remoto a un server Linux


32

C'è un modo per bypassare o impedire l'esecuzione ~/.profilequando si accede a un server Linux remoto usando ssh o putty?


Perché vorresti farlo? Perché non modificare semplicemente i valori nel file? (Dopo tutto è il tuo profilo.)
Telemaco,

7
Ciò è utile, ad esempio, se qualcuno ha rovinato il file .profile e non hai accesso diretto al sistema :)
monkey_p,

Questa è esattamente la situazione in cui mi sono trovato in monkey_p
Andrew Hampton,

Risposte:


30

Per bash:

$ ssh hostname "bash --noprofile"

6
Avrai anche bisogno -tdell'opzione, penso.
Grawity,

2
ssh -t nome host "bash --noprofile". Se -t non c'era, stavo ottenendo l'errore "standard in deve essere un tty".
nitine,

14

Se stai cercando di disattivare tutti gli script di accesso, è possibile utilizzare il --noprofileflag per disabilitare /etc/profile, ~/.profileecc e --norcper disabilitare ~/.bashrcin questo modo:

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

Tieni presente che puoi anche lanciare una shell alternativa se disponibile. Ho dovuto usare questo dopo aver incasinato chsh:

$ ssh 127.0.0.1 sh

Molto probabilmente questo ti farà cadere in una shell vuota (nessun prompt), quindi lsassicurati che funzioni.


4

Se la tua macchina target è in una shell bash:

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

In alternativa, se c'è un altro profilo che desideri utilizzare

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

1

Inoltre, prova a utilizzare un programma FTP come WinSCP per eliminare il file di accesso errato. Questo lo eliminerà, ma almeno dovresti essere in grado di accedere alla shell predefinita


o forse semplicemente rinominarlo.
jezmck,

1

Come altri hanno già detto, l'esecuzione di con il --noprofileflag quando si avvia la connessione funzionerà, sebbene se si utilizza una shell diversa questa potrebbe essere o meno un'opzione.

Un'alternativa sarebbe che lo script del profilo rilevi una connessione SSH stessa e si comporti di conseguenza. Poiché le connessioni SSH imposteranno normalmente un numero di variabili d'ambiente, questo può essere facilmente verificato. L'aggiunta di qualcosa come le seguenti righe all'inizio del profilo dovrebbe essere sufficiente:

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

Il returnsalterà il resto dello script se la $SSH_CONNECTIONvariabile di ambiente è impostata, che normalmente sarebbe creata ogni volta che viene avviata una connessione SSH. Altrimenti il ​​profilo verrà eseguito normalmente.

Nota che questo salterà solo lo script del profilo interessato. Tutti gli altri script di profilo (ad esempio:) /etc/profileverrebbero comunque elaborati a meno che non vengano modificati in modo simile.

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.