Paramètre SSH pour ignorer le script .bashrc


8

J'ai un serveur qui, lorsqu'il démarre, une ligne dans .bashrcexécute la commande suivante /bin/watch ~/checker.bashqui, comme prévu, regarde cette commande au démarrage du serveur.

J'ai également un client qui se connecte à cette machine, mais je ne veux pas que les sessions du client exécutent la même commande à partir du .bashrc.

J'ai regardé AcceptEnvpour passer les vars env, bien que cela nécessite une configuration du serveur, que je veux éviter.

Je ne veux pas non plus avoir 2 comptes d'utilisateurs différents pour différents .bashrc.

Y a-t-il un autre angle pour aborder cela?


pourquoi ne voulez-vous pas deux comptes différents? tous les "clients" (qui semblent être des tiers indépendants) doivent être isolés (également de vous-même)
— umläute

Réponses:


5

vous ne pouvez activer certaines parties de votre fichier .bashrcque s'il n'est pas appelé via ssh.

par exemple quelque chose comme:

# within an SSH-session, ${SSH_TTY} will be set
if [ "x${SSH_TTY}" = "x" ]; then
  /bin/watch ~/checker.bash
fi

travaillé comme un charme et toutes les réponses ici m'ont beaucoup appris. Très appréciée!
— ljs.dev

13

Deux façons:

N'utilisez pas bash pour cette session, essayez dash (ou / bin / sh):

ssh 127.0.0.1 /bin/dash

Utilisez bash avec les options de commande pour désactiver le traitement des fichiers de démarrage:

ssh 127.0.0.1 "bash --noprofile --norc"

as-tu essayé tes moyens? (surtout # 2)?
— umläute

1
La 2ème méthode ne tient qu'à moi.
— slm

5
La deuxième méthode fonctionne parfaitement pour moi. Vous ne voyez pas d'invite car la PS1 n'est pas définie, ce qui est un effet secondaire de l'exécution comme demandé.
— Dan Garthwaite

tous les deux pendent pour moi
— Aditya Mittal

@AdityaMittal Les deux semblent se bloquer si vous appelez une session interactive car il n'y a pas d'invite PS1. Essayez de taper 'ls /'
— Dan Garthwaite

2

Vous pouvez remplacer la ligne / bin / watch .... par

 if ps ax | grep /bin/watch | grep -v grep  > /dev/null 2>&1
 then
    echo "Nothing to do"
 else
    /bin/watch ~/checker.bash
 fi

ou quelque chose comme ça.


OK super. Dans ce cas, je peux avoir plusieurs shells exécutant la watchcommande, mais j'aime la solution.
— ljs.dev
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.