直接アクセスできないサーバーに ssh するにはどうすればいいですか?

直接アクセスできないサーバーに ssh するにはどうすればいいですか?

コンテクスト

私はプライマリマシンとして Ubuntu Desktop を実行しており、これを D と呼びます。SSH 経由でサーバー S に接続したいのですが、ファイアウォールによってブロックされています。

私はWindows仮想マシンを含む非常に面倒なパスを介してサーバーSにアクセスし、パテこれにより、このサーバーでの作業が非常に面倒になります。環境が完全に異なる、コピー/貼り付けが機能しない、接続中にデスクトップを適切に使用できない(Alt-Tabが仮想マシンによって壊れている)など

サーバー S からデスクトップ マシン D に ssh 接続できることを確認しました (必要な操作とは逆です)。

デスクトップからサーバーに SSH 接続できるように、サーバーから「ポート転送」などを開始することはできますか?

答え1

次のコマンドを使用して、リモート サーバーからローカル マシンへの SSH トンネルを設定できます。

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

トンネルが設定されると、次のコマンドを使用してリモート サーバーに ssh で接続できます。

$ ssh -p 1234 user@localhost

自動ログイン (パスワード プロンプトなし) には SSH キーを設定する必要があることに注意してください。SSH トンネルを対話的に作成する場合は、オプションを削除できます-f -N。詳細については、 を参照してくださいman ssh

答え2

OpenSSHの新しいバージョン(7.3以降)を使用している場合は、ProxyJump魔法のようにすべてを一緒に焼き上げます:

ssh -J windows_machine remote_server

あなたの場合、次の~/.ssh/configようになります:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJump完全な SSH 構文をサポートしているため、 がjimオンになっていて、 SSH にwindows_serverポートを使用している場合は、 IPから次のように記述できます。2222remote_server192.168.0.110windows_server

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

そしてまだssh remote_serverそこに着くまでただ走るだけです。


古いバージョンのSSHを実行している場合は、プロキシコマンド- これにより、実際の SSH コマンドを実行する前に、プロキシ接続を確立するためのコマンドを最初に実行するように SSH に指示できます。

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

これはSSHを使用します-Wオプションは、より難解なnetcat 構文

実行するときに、IPアドレスssh remote_serverwindows_machineremove_server 跳び箱からマシンの IP ではなく、これらは同じである可能性があります。

次に、次のディレクティブを~/.ssh/configファイルに追加します。

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

つまり、もしremote_server 別のマシンから見た場合は、windows_machineそれを構成に入れて、そのまま使用できますssh remote_server

答え3

物事を回避して複雑なパスを作成するのではなく、デスクトップからサーバーへの SSH を許可するように要求するだけでよいのではないでしょうか。その必要があり、サーバーにアクセスする必要がある場合、要求が拒否される理由がわかりません。

関連情報