26 votes

Comment déterminer si je suis connecté via SSH ?

Je suis en train de mettre en place une configuration bash assez complexe qui sera utilisée sur plusieurs machines. J'essaie de savoir s'il est possible de déterminer si je suis connecté via SSH ou sur une machine locale. De cette façon, je pourrais, par exemple, définir des alias en fonction de ce fait. Comme les alias halt a restart car arrêter un serveur distant n'est peut-être pas la meilleure chose à faire.

Ce que je sais jusqu'à présent, c'est que la variable d'environnement SSH_CLIENT est défini lorsque je me suis connecté via ssh. Malheureusement, cette variable est ignorée lorsque je lance un super utilisateur Shell avec sudo -s . Je sais aussi que je peux passer un paramètre à sudo qui demande à sudo de copier toutes mes variables d'environnement dans le nouvel environnement Shell, mais si je ne veux pas faire cela, y a-t-il un autre moyen ?

19voto

mahemoff Points 617

Vous pouvez utiliser la sortie de commande "w" ou "who". Lorsque vous vous connecterez par ssh, ils afficheront votre IP source.

0 votes

Idée géniale - Juste par curiosité, si je suis connecté à partir de plusieurs machines (une situation vraiment rare), comment déterminer quelle ligne de "w <username>" se réfère à mon Shell actuel ? Puis-je utiliser le champ TTY pour cela ?

1 votes

Faites des suppositions éclairées. Par exemple, exécutez ps afx et le TTY pour le Shell qui n'est pas en cours d'exécution ps sera l'autre login.

6 votes

使用する who am i .

16voto

Sumit Trehan Points 339

Voici une excellente réponse que j'ai trouvée sur unix.stackexchange :


  • Si l'une des variables SSH_CLIENT ou SSH_TTY est défini, il s'agit d'une session ssh.
  • Le processus parent du login Shell peut être vérifié avec ps -o comm= -p $PPID . Si c'est sshd c'est une session ssh.

    if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then SESSION_TYPE=remote/ssh else case $(ps -o comm= -p $PPID) in sshd|*/sshd) SESSION_TYPE=remote/ssh;; esac fi

1 votes

Ne fonctionne pas pour sudo -s

7voto

David Points 344

Vous pourriez ajouter SSH_* a env_keep en sudoers afin de pouvoir le détecter lors du passage à l'autre utilisateur.

5voto

Andy Lester Points 740

Je pense que vous devez repenser la façon dont vous envisagez le problème. La question n'est pas "suis-je connecté via SSH, parce que je veux désactiver certaines commandes." C'est "suis-je connecté à la console, car alors je vais activer certaines commandes."

5voto

mivk Points 3226

Oui, comme d'autres l'ont noté, l'information se trouve dans la présence de votre IP entre parenthèses dans la sortie de who am i .

Vous pouvez utiliser des expressions régulières Bash pour le détecter :

if [[ $(who am i) =~ \([0-9\.]+\)$ ]]; then echo SSH; else echo no; fi

2 votes

Il peut également s'agir d'un nom d'hôte.

0 votes

Ne fonctionne pas si le nom d'hôte contient des chiffres.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X