Existe-t-il un moyen de contourner ou d'empêcher l'exécution de ~/.profile
lorsque vous vous connectez à un serveur Linux distant en utilisant ssh ou putty?
Existe-t-il un moyen de contourner ou d'empêcher l'exécution de ~/.profile
lorsque vous vous connectez à un serveur Linux distant en utilisant ssh ou putty?
Réponses:
Si vous cherchez à désactiver tous les scripts de connexion, vous pouvez utiliser le --noprofile
drapeau pour désactiver /etc/profile
, ~/.profile
etc. et --norc
à désactiver ~/.bashrc
comme ceci:
$ ssh 127.0.0.1 "bash --noprofile --norc"
Gardez à l'esprit que vous pouvez également lancer un autre shell s'il en existe un. J'ai dû l'utiliser après avoir gâché chsh
:
$ ssh 127.0.0.1 sh
Cela vous déposera très probablement dans un shell vide (pas d'invite), alors donnez-lui un ls
pour vous assurer qu'il fonctionne.
Si votre machine cible est dans un shell bash:
user@host:/$ ssh hostname "bash --noprofile"
Alternativement, s'il y a un autre profil que vous souhaitez utiliser
user@host:/$ ssh hostname "bash --noprofile; source ~/.other_profile"
Essayez également d'utiliser un programme FTP comme WinSCP pour supprimer le fichier de connexion erroné. Cela le rejettera, mais au moins vous devriez pouvoir vous connecter au shell par défaut
Comme d'autres l'ont mentionné, exécuter bash avec l' --noprofile
indicateur lorsque vous lancez la connexion fonctionnera, bien que si vous utilisez un autre shell, cela peut ou non être une option.
Une alternative serait que le script de profil détecte lui-même une connexion SSH et se comporte en conséquence. Étant donné que les connexions SSH définissent normalement un certain nombre de variables d'environnement, cela peut facilement être vérifié. L'ajout de quelque chose comme les lignes suivantes au début de votre profil devrait suffire:
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
Le return
ignorera le reste du script si la $SSH_CONNECTION
variable d'environnement est définie, qui serait normalement créée chaque fois qu'une connexion SSH est initiée. Sinon, le profil sera exécuté comme d'habitude.
Notez que cela ne fera qu'ignorer le script de profil affecté. Tous les autres scripts de profil (par exemple:) /etc/profile
seraient toujours traités à moins que vous ne les modifiiez de la même manière.