web-dev-qa-db-ja.com

直接アクセスできないサーバーにSSHで接続する方法は?

環境

Ubuntuデスクトップをプライマリマシンとして実行しています。これをDと呼びます。ssh経由でサーバーSに接続したいのですが、ファイアウォールがブロックしています。

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

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

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

17
dangonfast

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

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

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

$ ssh -p 1234 user@localhost

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

32
Khaled

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構文をサポートしているため、jimwindows_serverであり、sshにポート2222を使用している場合。 remote_server192.168.0.110からIP windows_serverにあり、次のように記述できます。

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

そして、stillssh remote_serverを実行してそこに到達します。


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

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

これはSSH -W オプションを使用します。これはより難解な netcat構文 の省略形です。

ssh remote_serverを実行すると、windows_machineにいるので、ジャンプからremove_serverのIPを使用していることを確認する必要があることに注意してください。マシンからのIPではなく、box-これらは同じである可能性があります。

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

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

これは、remote_serverである場合、windows_machineから見た別のマシンである場合、それを構成に追加して、 ssh remote_serverを使用します。

5

物事を回避して複雑なパスを作成するのではなく、デスクトップからサーバーへのSSHを許可するように要求できませんか?あなたがそれを必要としていて、あなたがサーバーにアクセスしているべきであるなら、なぜあなたがリクエストを拒否するのか分かりません。

1
Solarflare