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?

Andrew Hampton
la source
Pourquoi voudriez-vous faire ça? Pourquoi ne pas simplement modifier les valeurs du fichier? (C'est votre profil, après tout.)
Télémaque
7
C'est utile, par exemple, si quelqu'un a foiré le fichier .profile et que vous n'avez pas d'accès direct au système :)
monkey_p
C'est exactement la situation dans laquelle je me suis retrouvé dans monkey_p
Andrew Hampton

Réponses:

30

Pour bash:

$ ssh hostname "bash --noprofile"
massysett
la source
6
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.

Jack M.
la source
4

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"
Nick Stinemates
la source
1

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

Sphiros O'Kelli
la source
ou peut-être simplement le renommer.
jezmck
1

Comme d'autres l'ont mentionné, exécuter 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.

goldPseudo
la source