C'è un modo per bypassare o impedire l'esecuzione ~/.profilequando si accede a un server Linux remoto usando ssh o putty?
C'è un modo per bypassare o impedire l'esecuzione ~/.profilequando 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 --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.
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 --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.