Contourner ~ / .profile lors de la connexion à distance à un serveur Linux
32
Existe-t-il un moyen de contourner ou d'empêcher l'exécution de ~/.profilelorsque vous vous connectez à un serveur Linux distant en utilisant ssh ou putty?
Vous aurez également besoin de l' -toption, je pense.
grawity
2
ssh -t hostname "bash --noprofile" .Si -t n'était pas là, j'obtenais l'erreur "standard in must be a tty".
nitins
14
Si vous cherchez à désactiver tous les scripts de connexion, vous pouvez utiliser le --noprofiledrapeau pour désactiver /etc/profile, ~/.profileetc. et --norcà désactiver ~/.bashrccomme 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 lspour vous assurer qu'il fonctionne.
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' --noprofileindicateur 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 returnignorera le reste du script si la $SSH_CONNECTIONvariable 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/profileseraient toujours traités à moins que vous ne les modifiiez de la même manière.
Réponses:
Pour bash:
la source
-t
option, je pense.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: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
: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.la source
Si votre machine cible est dans un shell bash:
Alternativement, s'il y a un autre profil que vous souhaitez utiliser
la source
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
la source
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:
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.la source