GNU/Linux >> Linux Esercitazione >  >> Linux

Come sapere se è in esecuzione in una console Linux rispetto a una sessione ssh?

ttyname ti dirà il nome del terminale connesso a un dato descrittore di file; ad esempio, ttyname(0) ti dirà il terminale di stdin.

Questo ovviamente fallirà se l'input o l'output viene reindirizzato.

A parte questo, puoi controllare varie variabili d'ambiente (SSH_CONNECTION , SSH_CLIENT , REMOTEHOST , DISPLAY , SESSIONNAME ). Wireshark ha una logica per rilevare se viene eseguito in remoto in modo da non acquisire il traffico di rete che genera; potresti essere interessato alla logica che la sua funzione get_conn_cfilter usa per implementare questo.


Controllare il valore restituito di ttyname(3) rispetto al tuo stdin dovrebbe darti il ​​nome del terminale che sta alimentando l'input del tuo processo.

Sarà /dev/console se il programma viene eseguito sulla console (e non ha il suo input reindirizzato). Puoi anche controllare stdout per vedere se è connesso a /dev/console - vedi quale si adatta meglio al tuo scenario di utilizzo.


Considererei le variabili d'ambiente come un segno ragionevole di quello che sta succedendo. Non sono sicuro di quale API C vorresti per questo, ma sono sicuro che ne esiste uno.

Ad esempio, sia il file SSH_CLIENT o SSH_CONNECTION le variabili di ambiente sono impostate sulla mia macchina indipendentemente dal client SSH utilizzato.

Potrebbe valere la pena verificare quanto siano universali in base al server SSH in esecuzione sulla macchina.


A seconda di quanto sei preoccupato che venga falsificato, un controllo facile sarebbe la presenza/assenza delle variabili d'ambiente SSH_CLIENT e SSH_CONNECTION, nel qual caso vorresti getenv funzione.


Linux
  1. Variabili d'ambiente Linux:come leggere e impostare su un VPS Linux

  2. Come modificare la porta SSH in Linux

  3. Esempi di comandi di esportazione Linux (come impostare le variabili di ambiente)

  4. Come impostare le variabili di ambiente Linux con Ansible

  5. Come staccare la sessione ssh senza uccidere un processo in esecuzione?

Come creare alias SSH in Linux

Come impostare/disimpostare le variabili d'ambiente in Linux

Come impostare e annullare l'impostazione delle variabili di ambiente su Linux

Come disconnettere un utente da SSH in Linux

Variabili d'ambiente Linux

Come eseguire l'SSH sul server tramite Linux