\r\n\r\n
アクセスできないLinuxコンピュータにSSH接続する必要がありますか?その接続を利用して、あなた自身のリモートSSHセッションを取得することができます。その方法を紹介します。
遠隔地にあるコンピュータは、連絡が取りにくいことがあります。設置されているサイトが厳しいファイアウォールルールを持っていたり、現地の管理者が複雑なネットワークアドレス変換ルールを設定している場合もあります。そのようなコンピューターに接続する必要がある場合、どのように到達するのでしょうか。
ラベルを作ろうあなたのコンピュータは、あなたの身近にあるからこそ、ローカルコンピュータなのです。接続したいコンピューターは、自分とは別の場所にあるため、リモートコンピューターと呼ばれます。
この記事で使用するローカルコンピュータとリモートコンピュータを区別するために、リモートコンピュータは「howtogeek」という名前で、ubuntulinux(紫のターミナルウィンドウが表示されている)が動作しています。ローカルコンピュータは「Sulaco」と呼ばれ、Manjaro Linuxが動作しています(黄色のターミナルウィンドウが表示されています)。
通常、ローカルコンピュータからSSH接続を開始し、リモートコンピュータに接続します。私たちが説明するネットワークシナリオでは、これはオプションではありません。具体的なネットワークの問題にかかわらず、SSHを使ってリモート・コンピュータに直接接続できない限りは、非常に有効な方法です。
しかし、あなた側のネットワーク設定が簡単であれば、遠隔地のコンピュータから接続することは可能です。しかし、これだけでは、リモートコンピューター上で動作するコマンドラインセッションを提供できないため、ニーズには十分ではありません。しかし、これはスタート地点です。2台のコンピュータの間に接続が確立されました。
その答えは、逆SSHトンネリングにある。
リバースSSHトンネリングは、確立された接続を使用して、ローカルコンピュータからリモートコンピュータへの新しい接続を確立することができます。
元の接続はリモートコンピュータからあなたへのものなので、それを使って反対方向に接続することは「逆向き」に使うことになります。また、SSHは安全であるため、既存の安全な接続の中に安全な接続を配置することになります。これは、リモートコンピュータへの接続が、元の接続の中で専用のトンネルとして機能することを意味します。
だから、"逆SSHトンネル "という名前がついたのです。
リバースSSHトンネルは、確立された接続を使用して、ローカルコンピュータからの新しい接続要求を聞くために、リモートコンピュータに依存しています。
リモートコンピュータは、ローカルコンピュータのネットワークポートをリッスンします。そのポートに対するSSHリクエストを検出した場合、接続リクエストを自分自身に転送し、確立された接続を閉じます。これにより、ローカルコンピュータからリモートコンピュータへの新しい接続が提供されます。
説明するより、セットアップが簡単です。
SSHはLinuxコンピュータにすでにインストールされていますが、ローカルコンピュータがこれまでSSH接続を受け入れたことがない場合、SSHデーモン(sshd)を起動する必要があるかもしれません。
sudo systemctl start sshdコンピュータを再起動するたびにSSHデーモンを起動するには、次のコマンドを使用します。
sudo systemctl enable sshdリモートコンピューター上で、以下のコマンドを使用します。
ローカルコンピュータに接続したことがない旨の警告が表示される場合があります。または、接続の詳細が認識されたSSHホストのリストに追加されるときに警告が表示される場合があります。表示される内容は、リモートコンピューターからローカルコンピューターに接続したことがあるかどうかですべてが決まります。
ローカルコンピューターへの接続に使用するアカウントのパスワードを入力するよう求められます。
接続が完了すると、コマンドプロンプトがDave@howtogeekからDave@Suracoになることに注意してください。
これで、リモートコンピュータからローカルコンピュータに接続できました。つまり、それに対してコマンドを発行することができるのです。ローカルコンピュータのログイン名を見るためにwhoコマンドを使用してみましょう。
whodaveというユーザーアカウントの人がローカルコンピューターにログオンし、リモートコンピューターがIPアドレス192.168.4.25から(同じユーザー認証情報を使って)接続していることがわかります。
関連:Linuxで現在のユーザーアカウントを確認する方法
リモートコンピュータからの接続が成功し、接続をリッスンしているので、ローカルコンピュータからリモートコンピュータへの接続を試みます。
リモートコンピュータは、ローカルコンピュータのポート43022をリッスンしています。したがって、リモートコンピュータへの接続を確立するために、sshにポート43022でローカルコンピュータへの接続を確立するよう依頼していることになり、やや直感に反しています。接続要求は、リモートコンピューターに転送されます。
ssh localhost -p 43022ユーザーアカウントのパスワードを入力するよう促され、ローカルコンピュータからリモートコンピュータに接続します。我が家のManjaroは、「Ubuntu 18.04.2LTSへようこそ」と嬉しそうに言っています。
コマンドプロンプトがDave@SuracoからDave@howtogeekに変更されていることに注意してください。到達困難なリモートコンピュータにSSH接続を行うという目標を達成しました。
リモートコンピューターからローカルコンピューターへの接続を容易にするために、SSHキーを設定することができます。
リモートコンピューターで、次のコマンドを入力します。
ssh-keygenパスワードのフレーズを入力するよう促されます。Enterキーを押すと、パスワードのフレーズ質問を無視することができますが、これは推奨されません。つまり、リモートコンピューター上の誰でも、パスワードを要求されることなく、ローカルコンピューターへのSSH接続を確立することができます。
記号で区切られた3〜4個の単語が、強固なコード化されたフレーズを形成します。
SSHキーが生成されます。
このコマンドを使って、公開鍵をローカルコンピュータに渡す必要があります。
ssh-copy-id [email protected]ログインするユーザーアカウントのパスワードを入力する画面が表示されます(この場合、[email protected])。
リモートコンピューターからローカルコンピューターへの接続要求を初めて行う場合、パスワードフレーズを提供する必要があります。端末ウィンドウを開いたままであれば、次回以降の接続要求の際に再度入力する必要はありません。
関連:LinuxシェルからSSH鍵を作成・インストールする方法
トンネルによっては暗くて複雑なものもありますが、リモート・コンピュータとローカル・コンピュータの関係を頭に入れておけば、逆SSHトンネルは難しくないのです。では、それを逆にしてください。