- Dave McKay
@TheGurkha
- July 18, 2019, 9:00am EDT
手の届かないLinuxコンピュータへSSHする必要がありますか? そのコンピュータにあなたを呼び出してもらい、 その接続をたどってあなた自身のリモート SSH セッションを手に入れましょう。
When you’ll want to use Reverse SSH Tunneling
時には、リモート コンピュータに到達するのが難しいことがあります。 それらが配置されているサイトは、所定の位置にタイトなファイアウォール ルールがあるかもしれませんし、おそらくローカル管理者は、複雑なネットワーク アドレス変換ルールを設定しています。 そのようなコンピューターに接続する必要がある場合、どのように到達すればよいのでしょうか。
いくつかのラベルを確立しましょう。 あなたのコンピュータは、あなたの近くにあるので、ローカルコンピュータです。 5197>
この記事で使用するローカルコンピューターとリモートコンピューターを区別するために、リモートコンピューターを「howtogeek」と呼び、Ubuntu Linux(紫の端末ウィンドウ)を実行しています。 ローカル コンピューターは「Sulaco」と呼ばれ、Manjaro Linux (黄色のターミナル ウィンドウ) が動作しています。
通常は、ローカル コンピューターから SSH 接続を起動し、リモート コンピューターへ接続することになります。 私たちが説明しているネットワークシナリオでは、それはオプションではありません。 リモート コンピューターへ直接 SSH 接続できない場合に便利です。 しかし、これだけでは、リモート・コンピュータ上で動作するコマンドライン・セッションを提供できないため、ニーズには十分ではありません。 しかし、これは手始めです。 5197>
The answer lies in reverse SSH tunneling.
What Is Reverse SSH Tunneling?
Reverse SSH tunneling allows you to set up a new connection from your local computer back to the remote computer.この確立した接続を使って、ローカルコンピューターからリモートコンピューターに戻る新しい接続を設定することができるようになりました。
元の接続はリモートコンピューターから自分へのものなので、それを使って別の方向に行くことは、”逆 “に使うことです。 そして、SSHは安全なので、あなたは既存の安全な接続の中に安全な接続を入れることになります。
そして、「逆 SSH トンネリング」という名前にたどり着きました。
How Does It Work?
逆 SSH トンネリングは、ローカルコンピュータからの新しい接続要求を聞くために、確立した接続を使ってリモートコンピュータに依存します。 そのポートへの SSH 要求を検出すると、確立された接続を使用して、その接続要求を自分自身に中継します。
説明するよりもセットアップが簡単です。
Using SSH Reverse Tunneling
SSH は Linux コンピュータにすでにインストールされていますが、ローカルコンピュータが以前に一度も SSH 接続を受け入れたことがなければ、SSH デーモン (sshd) を開始しなければならない場合があります。
sudo systemctl start sshd
コンピュータを再起動するたびにSSHデーモンを起動させるには、次のコマンドを使用します:
sudo systemctl enable sshd
リモートコンピュータ上では、次のコマンドを使用します。
-
-R
(逆)オプションは、新しいSSHセッションをリモートコンピュータ上で作成しなければならないことをssh
に伝えます。 - 「43022:localhost:22」は、ローカルコンピュータのポート43022への接続要求をリモートコンピュータのポート22に転送するよう
ssh
に伝えます。 ポート43022が選ばれたのは、未割り当てであることが記載されているからです。 - [email protected] は、リモートコンピュータがローカルコンピュータで接続しようとしているユーザーアカウントです。
ssh -R 43022:localhost:22 [email protected]
前にローカルコンピュータに接続したことがないという警告が表示されることがあります。 または、接続の詳細が認識された SSH ホストのリストに追加されたときに警告が表示されるかもしれません。
ローカルコンピュータに接続するために使用するアカウントのパスワードの入力を求められます。
接続が完了すると、コマンド プロンプトが dave@howtogeek から dave@sulaco に変わることに注意してください。
これで、リモート コンピューターからローカル コンピューターへ接続されました。 つまり、コマンドを発行することができるのです。
who
daveというユーザーアカウントの人がローカルコンピューターにログインしていること、リモートコンピューターがIPアドレス192.168.4.25から(同じユーザー認証情報を使用して)接続していることがわかります。 Linux で現在のユーザー アカウントを確認する方法
Connecting to the Remote Computer
リモート コンピューターからの接続が成功し、接続を待機しているので、ローカル コンピューターからリモート コンピューターへ接続してみます。
リモート コンピューターがローカル コンピューターで 43022 ポートを待機しています。 そこで、直感に反して、リモートコンピュータに接続するために、ssh
にポート43022でローカルコンピュータに接続するように依頼します。 5197>
ssh localhost -p 43022
ユーザーアカウントのパスワードを要求され、ローカルコンピュータからリモートコンピュータに接続されました。 私たちの Manjaro コンピューターでは、「Ubuntu 18.04.2 LTS へようこそ」と嬉しそうに言います。
コマンド プロンプトが、dave@sulaco から dave@howtogeek に変わったことに注意してください。 5197>
Using SSH With Keys
リモート コンピューターからローカル コンピューターへの接続をより便利にするために、SSH 鍵を設定することができます。
リモートコンピュータで、次のコマンドを入力します:
ssh-keygen
パスフレーズを入力するプロンプトが表示されます。 Enterを押してパスフレーズの質問を無視することもできますが、これはお勧めできません。
記号で区切られた3つまたは4つの単語は、堅牢なパスフレーズになります。
あなたのSSH鍵が生成されます。
我々は、ローカルコンピュータに公開鍵を転送する必要があります。 このコマンドを使用します:
ssh-copy-id [email protected]
ログインしているユーザーアカウントのパスワード(この場合、[email protected])を要求されます。
リモートコンピュータからローカルコンピュータに初めて接続要求を行うときに、パスフレーズを指定する必要があります。 5197>
RELATED: Linux シェルから SSH キーを作成してインストールする方法
Not All Tunnels Are Scary
Some tunnel can be dark and twisty, but reverse SSH tunneling is not too hard to navigate if you can keep the relationship between remote computer and local computer straight in your head.これは、トンネルが暗く曲がりくねったものであっても、リモートコンピューターとローカルコンピューターの関係をあなたの頭の中でまっすぐに保つことができるなら、ナビゲーションはそれほど難しくないでしょう。
Dave McKay が最初にコンピュータを使ったのは、パンチングペーパーテープが 流行っていた頃で、それ以来ずっとプログラミングを続けています。 IT業界で30年以上働いた後、現在はフルタイムのテクノロジー・ジャーナリストとして活躍しています。 フリーランスプログラマー、国際的なソフトウェア開発チームのマネージャー、ITサービスプロジェクトマネージャー、そして最近ではデータ保護責任者として活躍している。 Linuxのエバンジェリストであり、オープンソースの提唱者でもあります。