C'è un modo per bypassare o impedire l'esecuzione ~/.profile
quando si accede a un server Linux remoto usando ssh o putty?
C'è un modo per bypassare o impedire l'esecuzione ~/.profile
quando si accede a un server Linux remoto usando ssh o putty?
Risposte:
Se stai cercando di disattivare tutti gli script di accesso, è possibile utilizzare il --noprofile
flag per disabilitare /etc/profile
, ~/.profile
ecc e --norc
per disabilitare ~/.bashrc
in 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 ls
assicurati che funzioni.
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"
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
Come altri hanno già detto, l'esecuzione di bash con il --noprofile
flag 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 return
salterà il resto dello script se la $SSH_CONNECTION
variabile 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/profile
verrebbero comunque elaborati a meno che non vengano modificati in modo simile.