1

インタラクティブな telnet 管理コンソールを備えたシステムを開発しています。要件により、telnet アクセスを無効にし、代わりに SSH を追加する必要があります。管理コンソールを、SSH ログインに使用できるスタンドアロン プログラムに変更するには、ベンダーが関与する必要があります。私は、次のような安価なソリューションを考えていました。

  1. 外部からのアクセスから telnet 管理コンソールをブロックしますが、localhost 接続には使用できるように実行したままにします。

  2. プロキシとして機能するログイン シェルを (C++ で、または運が良ければこのような単純なもので) 作成します。ログイン シェルは localhost に telnet で接続し、ユーザーから受信したすべてのコマンドを telnet 経由で送信し、telnet サーバーから受信したすべての表示とプロンプトをユーザーに送信します。

  3. /etc/passwd を変更して、ユーザーが ssh 経由でログインしたときにこのプロキシ シェルを起動します。

私が考えていることは可能ですか?私が立ち往生する恐ろしい落とし穴はありますか?より良い代替手段はありますか?ssh デーモンとして OpenSSH を使用しています。

4

1 に答える 1

4

Telnetをローカル接続に制限することは、特にコードに触れたくない場合は、良い計画のように思えます。ただし、手順2と3は不要です。接続を確立したら、リモートシェルで「telnet」コマンドを呼び出すだけです。これは、ユーザーのホームディレクトリに.ssh/rcスクリプトを作成することで自動的に実行できます。

ただし、このアプローチの潜在的な問題の1つは、Telnet制御シーケンスが正しく通過しない可能性があることです。したがって、別の方法は、ポート転送を使用して安全なSSH接続を介してTelnet接続をトンネリングすることです。この戦略では、クライアントとサーバーで引き続きTelnetを実行しますが、接続はSSHを使用して暗号化されます。これを設定するには、次のようにSSHクライアントを呼び出します。

ssh -L 23:localhost:23 user@host

「user@host」をSSHサーバーのユーザー/ホストに置き換えます。このコマンドの効果は、クライアントボックスのポート23(telnet)が開かれることです。また、接続はSSH経由でサーバーのポート23に転送されます。したがって、クライアントでは、ローカルホストにTelnetを使用すると、SSHデーモンと同じボックスで実行されているTelnetサーバーに接続が転送されます。

クライアントのセキュリティ設定でポート23を使用できない場合は、最初の「23」を別の「23」(1123など)に変更できることに注意してください。その場合、Telnetクライアントをlocalhost:1123などにポイントすると、リモートシステムのポート23に転送されます。Red Hat Magazineには、このようなユースケースでSSHポートフォワーディングを使用するための優れたチュートリアルがあります。

于 2009-12-22T19:02:55.587 に答える