8
votes

Comment savoir si vous utilisez une console Linux par rapport à une session SSH?

J'ai une application qui doit se comporter différemment si elle est exécutée directement à partir de la console Linux. Donc, si un utilisateur se connecte avec SSH pour exécuter Foobar, ou que l'utilisateur se promène vers la console et se connecte directement à exécuter Foobar, je veux qu'il fasse quelque chose de différent.

Qu'est-ce que je dois appeler à la différence entre ces deux scénarios? Je pensais que je devrais regarder les informations "TTY / PTS" (telles que ce que je vois quand je gère "PS AXF"), mais je ne suis pas certain si c'est la meilleure solution, ni quelle API à appeler Pour obtenir cette information.

Astuces appréciées. :)


2 commentaires

Il existe d'autres moyens d'obtenir une session de coquille non TTY que de se connecter sur SSH. Par exemple, maintenant sur mon bureau, j'utilise Konsole dans KDE ... Je suis physiquement sur l'ordinateur, mais cela apparaît comme une pty quand je gère qui . Cela compterait-il comme une session de console ou de "ssh" à vos fins? Peut-être devriez-vous modifier votre question pour être plus claire.


Je pense que vous posez des questions sur deux choses différentes ... La question actuelle semble être la suivante: comment dire si vous courez dans un terminal X local ou via SSH Session. "Console Linux" signifie typiquement la console matérielle accessible avec [Ctrl +] ALT + F2, etc. Le plus tard peut être détecté si $ term == "Linux".


5 Réponses :


8
votes

Selon combien vous vous inquiétez d'être spoofé, une vérification facile serait pour la présence / l'absence des variables d'environnement SSH_CLIENT et SSH_Connection, auquel cas vous souhaiteriez le getenv fonction.


0 commentaires

3
votes

Je regarderais des variables d'environnement comme un signe raisonnable de ce qui se passe. Je ne suis pas sûr de ce que vous voudriez pour cela, mais je suis sûr que l'un existe.

Par exemple, les deux ssh_client ssh_connection Les variables d'environnement sont définies sur ma machine, quel que soit le client SSH utilisé.

Cela peut être utile de vérifier la manière dont les universels sont basés sur le serveur SSH fonctionnant sur la machine.


1 commentaires

Putain, le développementAnanity m'a battu;) n'aurait pas dû prendre si longtemps écrit ...



6
votes

Vérification de la valeur de retour de TtyName (3) contre votre STDIN devrait vous donner le nom du terminal qui alimente l'entrée de votre processus.

Ce sera / deviennera / console si le programme est exécuté sur la console (et ne dispose pas d'une entrée redirigée). Vous pouvez également vérifier stdout pour voir s'il est connecté à / dev / console - voir qui correspond à votre scénario d'utilisation mieux.


1 commentaires

Ce n'est pas / dev / console, mais / dev / tty [0-9], tandis que les sessions ssh et gnome-terminal apparaissent avec des noms tels que / dev / pts / [0-9] +. Combiné à Isatty (), votre allusion à utiliser TtyName () fonctionne bien pour ce que je devais faire.



5
votes

TTYNAME vous indiquera le nom du terminal connecté à un descripteur de fichier donné; Par exemple, TtyName (0) vous dira que le terminal de STDIN.

Ceci va bien sûr échouer si l'entrée ou la sortie est redirigée.

Sauf que, vous pouvez vérifier diverses variables d'environnement ( ssh_connection , ssh_client , remotehost , afficheur , < code> Nom de session ). Wireshark a la logique pour détecter s'il est exécuté à distance afin qu'il ne capture pas le trafic réseau qu'il génère; Vous pourriez être intéressé par la logique que son get_conn_cfilter fonction utilise pour Mettre en œuvre cela.


1 commentaires

Belle attrape dans les sources de Wireshark!



0
votes

moche, mais fonctionne: xxx


0 commentaires