SSHトンネルを使用して多層ホストの大通り抜けを実現

6113 ワード

とても気がふさいでネットを现して登录します
実际の仕事の中で、现网のメンテナンスと管理を必要とするサーバーは通常1台だけではなくて、N数台(N>3)の有木有???残念ながら、ほとんどの现网环境は1台のサーバーだけが公网のアドレスを提供して、时には1つのポートだけが使用を许されることがあります--それはポート22です.
つまり,SSHを介して現ネットワーク環境の1台のサーバにログインし,そのサーバをスキップボードとしてSSHを継続して別のサーバにログインするしかない.超煩わしい有木有???
内部の1台のサーバにファイルをアップロードする場合は、まずSFTPでパブリックネットワークで直接アクセスが許可されているサーバにアップロードしてから、2回目に他のサーバに転送する必要があります.ダウンロードファイルもこのように何度も転送する必要があります.伝えて伝えて疲れた有木有???
さらに悲しい環境は、あるサーバDにアクセスするには、まずAにログインし、それからAを通じてBにログインし、それからCにログインし、最後にDにログインする必要があります.
通り抜ける
ドラマは毎日通り抜けて、ITをする理由がなくて时代の流れに追いつかないで、私达も通り抜けなければなりません.通り抜ける道具は「SSHトンネル」.
次のようなネットワーク環境が想定されます.
+-----------+ (SSH) +-----------+ | Alpha | ===++===> | Beta | | 220.0.0.1 | || | 10.0.0.2 | +-----------+ || +-----------+ || || +-----------+++===> | Gamma | | 10.0.0.3 | +-----------+
3台のサーバがあり、Alphaはパブリックネットワークへのアクセスを許可し、1つのSSHポート-22ポートしか開放されていません.BetaとGammaの2台のサーバはパブリックネットワークから直接アクセスできず,SSHのみがAlphaサーバにログインした後,Alphaサーバを介してアクセスする.すべてのサーバはSSHサービスを提供し、各サーバのユーザー名パスワードはそのホスト名(例えば、Alphaサーバのログインユーザー名/パスワードはalpha/alpha)である.
では、SSHがBetaサーバにログインするたびにAlphaにログインしたくないので、面倒です.ファイルのアップロード/ダウンロードも不便です.私たちはBetaの22ポートを「マッピング」したいと思っています.このようにして、私たちは直接Alphaを通り抜けて、Betaを直撃することができます!
もし今自分が使っているパソコンがWindowsサーバーであれば、このSSHがトンネルを通り抜けるにはどうすればいいですか?まず、SSHクライアントツール:plinkを用意する必要があります.exe. (このツールはLinuxサーバのsshコマンドに相当します.つまり、自分が使っているパソコンがLinuxシステムであれば、次のすべてのコマンドはplink.exeの代わりにsshを使うことができます.)
次に、コンソールモードで次のコマンドを入力します.
plink.exe -N -pw alpha -L 127.0.0.1:10022:10.0.0.2:22 [email protected]
(注意:ファイアウォールのプロンプトがある場合は、「許可」を選択します.)
実行後、plink.exeは終了せず、ずっと実行され、閉じる必要はありません.このとき、あなたのコンピュータには、リスニングポート10022が確立されます.軽蔑しないでください.それは今回通り抜けた入り口です.このポートを接続することは、Betaサーバを接続した22ポートに相当します.SSHがトンネルを通り抜ける形式を確立したことに相当する.
+-----------+ (SSH) +-----------+ (SSH) +-----------+ | Your PC | =======> | Alpha | ========> | Beta | | | | 220.0.0.1 | | 10.0.0.2|+----------------------++----------------------+|10022 Port|-------------------------------------------------->|22 Port|+---------------+(通り抜けた)+--------+
その後、SSHクライアントソフトウェア(SecureCRTなど)で127.0.0.1:10002への接続を中立的にするだけで、Betaに直接接続できます.SFTP接続127.0.0.1002:12を使用すると、Betaサーバ上のファイル資料を直接アップロード、ダウンロードすることができます.
ははは、さわやかでしょう!
GammaというOracleデータベース・サーバのストレージ・プロシージャに問題があることに気づいたら、変更する必要があります.どうすればいいですか?現在、ネットは1つのパブリックポート22しかオープンしていませんよね?神馬ポートマッピングのアイデアは、すべて無駄で、現在のネットワーク環境は許可されていません!の
あ、何、SSHでAlphaにログインして、sqlplusで接続して修正するって言ったの?Oh, my god! PL/SQLのような高級なツールを使わないのは本当に残念です.
今、私たちの通り抜けの大法があって、すべてすべて可能です!スピード入力コマンド:
plink.exe -N -pw alpha -L 127.0.0.1:1521:10.0.0.3:1521 [email protected]
では、PL/SQLで127.0に接続します.0.1:1521でしょう.Gammaサーバに到達する1521ポートを直接通り抜けます.
スーパー大通り抜け
最近一つのプロジェクトをしていて、とても憂鬱です.私が頻繁にアクセスする必要があるサーバはGmmmaで、このようなネットワーク環境にあります.
+-----------+ (SSH) +-----------+ (SSH) +--------------+ | Alpha | ========> | Beta | ==========> | Gamma | | 220.0.0.1 | | 10.0.0.2 | | 192.168.0.2 | +-----------+ +-----------+ +--------------+
毎回Gammaにアクセスするには、AlphaにログインしてからBetaにログインし、最後にGammaにログインする必要があります.君が気絶するかどうか分からないが,どうせ私は気絶したんだ.
では、2台のサーバを越えたスーパータイムスリップを実現しましょう.
まず、アルファサーバにSSHでログインし、次のコマンドを入力します.
ssh -N -L 127.0.0.1:10022:192.168.0.2:22 [email protected]
このコマンドを実行すると、sshは終了しません.sshを終了させることもできません.煩わしいのが嫌なら、直接CTRL+z&bg、後ろに捨ててください.
次に、自分のパソコンにコマンドを入力する必要があります.
plink.exe -N -pw alpha -L 127.0.0.1:20022:127.0.0.1:10022 [email protected]
これにより、自分のパソコンに20022ポートが作成され、このポートを接続することはGammaに接続された22ポートに相当します.
実は、上の操作は2つのSSHがトンネルを通り抜けることを創立しました:1つは自分のコンピュータの20022ポートからAlphaサーバーの10022ポートで、もう1つはAlphaサーバーの10022ポートからGammaサーバーの22ポートです.この2つのトンネルは最初と最後がつながっていて、超長いトンネルを形成して、今回の期待の超大通り抜けを実現しました.
+---------------------+(SSH)+---------------------+(SSH)+----------------------------+|あなたのパソコン|0.1 | | 10.0.0.2 | | 192.168.0.2|+---------------++---------------++++----------------------+|20022ポート|--------------->|10022ポート|-------------------------------------->|22ポート|+--------+++--------++++---------------++
 
スルー原理
ここでは、上述したSSHがトンネルを通過する基本原理について説明する.SSHトンネルを構築ここでは主にsshクライアントツールの"-L"パラメータを使用します.「-L」パラメータは、主にローカルポートからリモートホストに指定されたポートへのトンネルを確立するために使用されます.「-L」パラメータのフォーマットは次のとおりです.
-L[ローカルリスニングIP:]ローカルリスニングポート番号:ターゲットホストIP:ターゲットポート番号
(ただし、「ローカルリスニングIP」は省略できますが、省略すると「0.0.0.0」となりますが、セキュリティ上の理由から、デフォルトの「0.0.0.0」ではなく、必ず「127.0.0.1」をローカルリスニングポートとして使用してください.)
「-L」パラメータを使用してsshクライアントツールを実行すると、sshクライアントツールは終了せずに実行され、「ローカルリスニングポート番号」に基づいてリスニングポートが作成されます.このポートにプログラムが接続されると、直ちにSSHトンネルを通過し、SSHのリモートホストに「ターゲットホストIP:ターゲットポート番号」の接続を通知し、最終的にトンネルを確立する.
たとえば、前述のコマンド「plink.exe-N-pw alpha-L 127.0.0.1:1521:10.0.0.3:1521」[email protected]」を実行すると、クライアントツールplinkが実行する.exeは運行を続け、SSHトンネルを建設し、トンネルの一端はplinkを運行する.exeのローカルコンピュータで、反対側はAlphaサーバです.そしてplink.exeは、ローカルコンピュータにおいて傍受ポート1521を確立する.ローカルの1521ポートにプログラムが接続するとplink.exeは直ちにSSHトンネルの他端(すなわちAlphaサーバ)に「10.0.0.3:1521」というターゲットホストIPおよびポートに接続することを通知し、ローカル1521ポートと10.0.0.3:1521ポートの伝送路を確立する.このようにして、SSHは私たちが望む通過を実現する.
「-N」パラメータは、リモートホストがコマンドを実行する必要がなく、SSHトンネルを構築したいだけです.
「-pw」パラメータは、SSHを指定したログインパスワードです.(注:Linuxのsshコマンドにはこのパラメータはありません.)
その他のパラメータ:sshクライアントには、「-R」などのトンネルの構築に関連する他の多くのパラメータがあり、より興味深い「-D」もあります.Linuxの男(「man」)を使ってみてください.この投げたレンガはあまり言わないで、玉のあるものが引き出されてほしいです.
安全上の考慮
現網はどうして1台のサーバーの22ポートだけが公網に対して開放することを許可して、大いに安全性の考慮が現れて、私達のここは便利なトンネルを創立して、目標のネットワークの安全性に影響しますか?これは私たちが考えなければならない問題です.
セキュリティに一定の影響があるとしか言いようがありませんが、あまり影響はありません.
まず、ネイティブとターゲットサーバのトンネルを構築すると、ターゲットホストの管理とメンテナンスが大幅に便利になりますが、すべての操作はターゲットネットワークにポートを多く開いていません.新しくオープンした唯一のポートは、ネイティブのポートです.やはり「127.0.0.1」の傍受IPアドレスを使用して構築されています(ここで強調しますが、トンネルを構築する場合、「ローカル傍受IP」は必ず「127.0.0.1」を使用します.)、つまり、トンネルができた後も、このトンネルを使用する本機能があり、ネットワーク上の他のホストはこのトンネルを使用できません.このトンネルは実際にはプライベートです.それは私达がふだんまずSSHを公网のホストに着いて、それから公网のホストを通じて内网の他のホストに飞び込むのは性质が一致して、ただ私达のためにいくつかの操作のステップと面倒な事を省略します.
また,このトンネルは一時的であり,SSHクライアントプログラムが終了するとトンネルはすぐに消失する.
トンネルが不正に利用されているといえば、SSHクライアントプログラムを実行するコンピュータに木馬プログラムが植えられている可能性が高い.そして、トンネルが構築された後、ハッカーは木馬が遠隔でこのコンピュータをこっそり制御し、この臨時に構築されたトンネルを使って不法な操作を行うのに役立つ.
まとめ
SSHは安全な転送プロトコルであり、最も一般的な用途はターゲットホストにログインし、コマンド処理を行うことである.安全な接続に基づくTelnetに相当する.もう一つの一般的な用途はファイル転送(SFTP)です.実は、SSH機能が多くなって、よく利用すれば、人類全体に幸福をもたらします.