Linux telnet サーバーは telnet プロトコル ハンドシェイクを使用しない

Linux telnet サーバーは telnet プロトコル ハンドシェイクを使用しない

シンプルなターミナル プログラムを使用して Linux telnet サービスに接続しようとしています。サーバーがデフォルトの VT-100 に設定されており、telnet サーバーが制御ハンドシェイク シーケンスを送信し、ターミナルがサポートされているオプションで応答することを期待し、ターミナルの応答を待機してハングしていると思われます。

ここに画像の説明を入力してください (画質が悪くて申し訳ありません)

残念ながら、端末は単なる通信プログラムであり、Telnet プロトコルを認識しません。

リモート端末プロパティの識別を開始せず、直接通信に進むように Telnet サーバーに指示する方法 (特定の端末タイプを設定するなど) はありますか?

編集:

質問に詳細を追加して編集してください: 使用している端末は何ですか、それはどのような「基本的な通信」プログラムですか?

通信プログラムは、Linux PC のポート 23 への TCP 接続を開き、キーボードで入力された文字を送信し、文字処理を行わずに受信した文字を画面に表示します。

telnetdの代わりに(またはtelnetdに加えて)サーバー上でnetcatを実行し、これを使用して通信自体が機能しているかどうかをデバッグできますか?

よく分かりません。両方のマシンを制御しているわけではありません。しかし、ターミナルを実行しているマシンが Linux マシンに接続でき、Linux マシンが Telnet プロトコル制御文字を送信できるというのは 100% 事実でしょうか (画像で確認できます - 白い文字は 0xff - Telnet オプションの開始マーカーです)。Wireshark ログがないので 100% とは言えませんが、通信は正常に動作しているようで、Telnet プロトコル ハンドシェイクを通過しないのは Telnet サーバーです。

接続したら、ログインしますか、それとも何か他のことをしますか? ターミナルでより安全なもの (例: ssh) を使用できますか?

はい、システムにログインするように要求する「login:」を telnet サーバーに表示させたいです。Linux マシン上の telnet サービスは動作可能です。telnet クライアントを使用して 3 番目のマシンからログインすることが可能ですが、この telnet クライアントは telnet プロトコルを認識しており、それに応答します。上記のケースでは、端末プログラムは telnet 制御コード/プロトコルについて何も認識せず、それ以上のアクションなしでそれらを文字として表示します (telnet プロトコルに従った応答)。

答え1

まず第一に、telnetネゴシエーションは端末の種類とは関係ありません。(実際、端末の種類は決定したしたがって、後者を変更しても前者を無効にすることはできません。

どのようにできる無効にするかどうかは、サーバー上の特定の telnetd 実装によって異なります。(Linux だけで 5 つの異なる in.telnetd を数えましたが、他の OS には独自の in.telnetd があります。)

サービス構成 (つまり、systemd .service ファイルまたは /etc/inetd) で使用できる telnetd コマンドライン オプションがある場合があります。

すべてが失敗した場合は、パッチを適用した独自の telnetd バージョンをコンパイルするだけです。すべての Linux ディストリビューションには、公式レシピ (dpkg-buildpackage、makepkg など) からパッケージを再構築する方法があります。

関連情報