GNU/Linux >> Linux の 問題 >  >> Linux

Linux コンソールと ssh セッションで実行されているかどうかを確認する方法は?

ttyname は、指定されたファイル記述子に接続されている端末の名前を示します。例:ttyname(0) stdin の端末を教えてくれます。

入力または出力がリダイレクトされた場合、これはもちろん失敗します。

それを除けば、さまざまな環境変数を確認できます (SSH_CONNECTIONSSH_CLIENTREMOTEHOSTDISPLAYSESSIONNAME )。 Wireshark には、生成されたネットワーク トラフィックをキャプチャしないように、リモートで実行されているかどうかを検出するロジックがあります。 get_conn_cfilter 関数がこれを実装するために使用するロジックに興味があるかもしれません.


stdin に対して ttyname(3) の戻り値をチェックすると、プロセスの入力を供給している端末の名前が得られます。

プログラムがコンソールで実行されている場合 (および入力がリダイレクトされていない場合) は /dev/console になります。 stdout をチェックして、それが /dev/console に接続されているかどうかを確認することもできます。どちらが使用シナリオに適しているかを確認してください。


何が起こっているかの合理的な兆候として、環境変数を見たいと思います。そのためにどの C API が必要かはわかりませんが、存在することは確かです。

たとえば、両方の SSH_CLIENT または SSH_CONNECTION 使用している SSH クライアントに関係なく、マシンに環境変数が設定されています。

マシンで実行されている SSH サーバーに基づいて、これらがどの程度普遍的であるかを確認する価値があるかもしれません。


なりすましをどの程度心配しているかにもよりますが、SSH_CLIENT および SSH_CONNECTION 環境変数の有無を簡単に確認できます。この場合、getenv が必要になります。 関数。


Linux
  1. LinuxでSSHポートを変更する方法

  2. Linuxで実行中のプロセスを強制終了する方法

  3. Linux で環境変数を設定、一覧表示、および削除する方法

  1. Linuxで環境変数とシェル変数を設定/作成する方法

  2. Linux エクスポート コマンドの例 (環境変数の設定方法)

  3. Ansible で Linux 環境変数を設定する方法

  1. Linux環境変数:LinuxVPSでの読み取りと設定の方法

  2. Linuxで応答しないSSH接続を終了する方法は?

  3. 実行中のプロセスを強制終了せずに ssh セッションを切り離すには?