Wie kann man sagen, wenn in einer Linux-Konsole im Vergleich zu einer SSH-Sitzung ausgeführt wird?

StackOverflow https://stackoverflow.com/questions/2908044

  •  04-10-2019
  •  | 
  •  

Frage

ich eine Anwendung, die Bedürfnisse anders verhalten, wenn sie direkt von der Linux-Konsole ausführen. Also, wenn ein Benutzer eine Verbindung mit SSH FooBar laufen, oder der Benutzer geht zu der Konsole und meldet sich direkt FooBar zu laufen, ich will es etwas anderes tun.

Was C-API muss ich den Unterschied zwischen diesen beiden Szenarien zu sagen, nennen? Ich dachte, ich muß auf der „tty / pts“ -Informationen aussehen würde (wie, was ich sehe, wenn ich „ps axf“ laufen), aber ich bin mir nicht sicher, ob das die beste Lösung ist, noch was API Aufruf diese Informationen zu erhalten.

Hinweise zu schätzen. :)

War es hilfreich?

Lösung

Überprüfen der Rückgabewert von ttyname (3) gegen den stdin sollten Sie geben den Namen des Terminals, der den Eingang Ihres Prozesses füttert.

Es wird / dev / console, wenn das Programm auf der Konsole ausgeführt wird (und nicht über seinen Eingang umgeleitet). Sie können auch stdout überprüfen, um zu sehen, ob es zu / dev / Konsole verbunden ist -. Sehen, welche besser Ihr Einsatzszenario passt

Andere Tipps

Je nachdem, wie viel Sie besorgt darüber gefälscht ist, eine einfache Prüfung auf das Vorhandensein / Fehlen des SSH_CLIENT und SSH_CONNECTION Umgebungsvariablen sein würde, in dem Fall, dass Sie die getenv Funktion wollen würden.

ttyname wird Ihnen sagen, den Namen des Terminals zu einem bestimmten Dateideskriptors verbunden ; zum Beispiel ttyname(0) werden Sie Terminal stdin Tells.

Dies wird natürlich fehlschlagen, wenn Ein- oder Ausgang umgeleitet wird.

Abgesehen davon, können Sie verschiedene Umgebungsvariablen überprüfen (SSH_CONNECTION, SSH_CLIENT, REMOTEHOST, DISPLAY, SESSIONNAME). Wireshark hat Logik zu erkennen, wenn sie aus der Ferne so ausgeführt ist, daß sie nicht capture Netzwerkverkehr, er erzeugt; Sie könnten in der Logik interessiert sein, dass seine get_conn_cfilter Funktion verwendet dies umzusetzen.

würde ich bei Umgebungsvariablen als ein vernünftigen Zeichen sehen, was los ist. Ich bin mir nicht sicher, was C-API Sie das wollen würde, aber ich bin sicher, dass ein solches vorhanden ist.

Zum Beispiel können beide das SSH_CLIENT oder SSH_CONNECTION Umgebungsvariablen wird auf meinem Rechner, unabhängig von dem SSH-Client festgelegt verwendet werden.

Es kann wert sein, wie universal diese auf dem SSH-Server basiert auf der Maschine läuft.

hässlich, aber funktioniert:

// don't force scripts to pause!
if (_isatty(_fileno(stdout)))
{
    _tprintf(_T("\nPress enter to continue..."));
    _gettc(stdin);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top