調査を始める前にこれが可能かどうかを確認したかったです。以下は、サーバーがSSH要求を継続的に受信したいシナリオです(すでに受信していると確信していますが、どこにいるのかわかりません)。着信コンピュータのIPアドレスに基づいてSSHの前に何もしないか、または対処します。試みが始まります。
注:システムに対するすべてのSSH試行(もちろん正しい資格情報を使用)を許可したいと思います。そうする前に、いくつかのことができるようにしたいです。 Gentoo Base 2.4.1の実行
答え1
TCPを介してサービスを提供するには、一部のプログラムlisten()
はリスニングソケットaccept()
そして、さらに受信される別々のTCP接続を受け入れるには、同じプログラムまたはそれに関連するプログラムを呼び出す必要があります。接続ソケット。 OpenSSHのサーバーデーモンは、この点で2つの基本モードで動作します。
-i
オプションなしでリリースされました。実行されたlisten()
後、着信接続ごとに子プロセスを繰り返し呼び出し、accept()
閉じる操作を繰り返します。fork()
-i
オプションから始まります。他のものlisten()
は、、、およびaccept()
を呼び出すことを期待し、fork()
接続されたソケットを開いたファイル記述子として使用して実行します。
後者のモードは、nowait
既存のスーパーサーバーinetd
のTCPサーバースタイル、Accept=yes
systemdのTCPソケット単位スタイル、Daniel J. BernsteinのUCSPI-TCPで使用されるサーバースタイルです。
残念ながら、以前のモデルは確かにsystemdwait
の下のTCPサーバースタイルinetd
とsystemdの下のTCPサーバースタイルにAccept=no
対応します。 OpenSSHはこのプロトコルを使用せず、LISTEN_FDS
リスニングソケットの開かれたファイル記述子を認識しません。さらに、残念ながら、一部の人々はこれらの使用パターンを奨励しているため、OpenSSHがシステムで実行されるように設定されている可能性があります。
なぜなら、あなたが望むのは後者のモードだからです。
ssh -i
接続のリモートエンドに関する情報を見て、exec()
以前に見つけたものに基づいてアクションをとる他のものでラップしますssh -i
。 (UCSPI-TCPを使用すると、リモート側の情報が環境変数に入力されるため、これは非常に簡単です。)その後、ssh -i
直接呼び出すのではなくラッパーを呼び出します。
これを行う方法の詳細は、お客様が使用しているサービス管理システムなど、お客様が当社に通知していない事項によって異なります。ExecStart
システムサービスユニットのさまざまな挿入から変更されたxinetd
設定ファイル、./service
nosh Service Packの置き換えまでさまざまです。
別のアプローチは、非呼び出しモードで動作するが、特定のサービスを提供する特定のプログラムのための特定のオプションを超えて一般化しないファイルのメカニズムを使用することです-i
(以前のアプローチとは対照的です)。これは、OpenSSHオプションのサブセット(ログレベルを含む)を設定する以外は何もしません。他の種類のサービスだけでなく、他のSSHサーバーソフトウェアでも機能しません。Match
sshd_config
包装に完全な精神を保ちなさい。 SSH接続は実行時に実行されません。いいえ(安全のために)読んでくださいどのネットワーク接続のデータまたはここにデータを書き込むことは、リストと比較してアドレス/ポートを確認し、どういうわけか各セッションの設定を構成することです。
追加読書
- ジョナサンデボインポラード(2016)。UNIXクライアント - サーバープログラミングインターフェースのgen。よく与えられる答えです。
- バーンスタイン、ダニエル(1996)。UNIXクライアント - サーバープログラムインターフェース。 cr.yp.to.
- ジョナサンデボインポラード(2016)。
ucspi-socket-rules-check
。 Nosh ツールセット。ソフトウェア。 - https://unix.stackexchange.com/a/315470/5132