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


17

環境

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

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

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

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


2
ホストをジャンプ...愛しなきゃ!!!
ロンジョン


@muruこれは別のシナリオですが、もちろん関連しています(結局、トンネリングについてです!)。この場合、私はD->S虐待によって偽造したいですS->D
ダンゴンファスト

回答:


32

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

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

トンネルがセットアップされたら、次のコマンドを使用してリモートサーバーにsshするだけです。

$ ssh -p 1234 user@localhost

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


このVMはWindows VMをどのようにトンネルしますか?(私が働いている場所には、ファイアウォールの複数の層があり、いくつかのポートのみが開かれています。)
RonJohn

@RonJohnこれは、サーバーからデスクトップへの(OPの)ssh-ingが機能するという事実を使用しているため、使用できるサーバー(ポート22)からデスクトップマシン(ポート1234)へのトンネルを直接設定すると信じていますポート22を使用するサーバー上のsshに接続します。Windows VMは、トンネルのセットアップにのみ使用されます。(間違っている場合は修正してください)
pizzapants184

@dangonfast答えに加えて、次の価値のあるドキュメントを見つけることができます。spencerstirling.com
computergeek

@RonJohnリンクしたばかりのドキュメントは、少なくともファイアウォールなどの複数の層が行く限り、その質問に答えるのに役立つかもしれません(メモリが私に役立つなら、それを読んだのは非常に長い時間でした..何年も前のリンクがあることを思い出した)。
プリフタン

1
@ pizzapants184確かに、それが私の出発点でした。S-> Dからのsshですから、これを悪用してD-> Sを効果的に実行したいと思います。ネットワークがそのように構成されているのはなぜですか?それは...故意または設定ミスが、限り、それは私の作品のようになり
dangonfast

5

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オンにwindows_serverしていて2222sshのポートを使用している場合。からremote_serverIPにある場合192.168.0.110windows_server次のように記述できます。

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

そして、まだちょうど実行ssh remote_serverそこに到達するためにします。


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

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

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

あなたが実行したときのように、という注意ssh remote_serverあなたが上で今のwindows_machineあなたがのIPを使用していることを確認する必要がありremove_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


1
これははるかに良い答えです。
ロバートリードル

これは便利ですが、尋ねられている質問には答えません。OPでは、D-> SからSSHを使用することはできません(希望どおり)が、S-> DからSSHを使用することはできます。間にsshプロキシはありません(代わりにWindows仮想マシンがあり、おそらくRDPによってアクセスされます)。
mbrig

@mbrig確かに。私はこの解決策を試したことはありませんが、うまくいくと驚くでしょう。私はD-> Sからファイアウォールで
保護されています-dangonfast

しかし、あなたはあなたがWindowsマシンに到達できると言います-それから私はそれがあなたと他のマシンの間のジャンプボックスとして機能できることを理解しました。
スパイダーボリス

1
専用ツール(VMWare Horizo​​n)を使用してWindowsマシンにログインできます。sshできると言ったことはありません。この質問を投稿する前に、Puttyコンパニオンsshサーバーをインストールしてテストしました(名前を忘れました)が、テストは失敗しました。sshもWindowsサブネットに対してファイアウォールで保護されていると思います。
ダンゴンファスト

1

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


downvoteを説明する気ですか?質問は、「直接アクセスできないサーバーにsshする方法」です。ファイアウォールルールを有効にして許可するという私の回答は有効です。また、適切なセキュリティ慣行に従って回避する適切な方法でもあります。
Solarflare

私は大企業の顧客との3か月契約の最初の週にいます。私はラップトップ(私は私のものを使用します)とかろうじて机を与えられていません。さまざまなサービスを使用するために何十もの資格情報を取得しましたが、すべてをうまくやり遂げることはほとんどできません。私がやりたいことは、仕事を遂行するのに難しい要件ではありません。VMで働くことができ、面白い質問をし始めたら上司が教えてくれます。または、彼は次の数週間/数か月間缶を蹴散らすヘルプデスクに私を向けます。
ダンゴンファスト

私にとってVMでの作業は生産性の50%の低下を簡単に意味するため、できる限り避けたいと思います。それでも、私はこのギグが大好きです!
ダンゴンファスト

1
私はそれを理解できます。私の経験では、「大企業の顧客」は、たとえ利他的目的であっても、請負業者が仕事をするためにファイアウォールやポリシーを迂回するとかなり動揺する傾向があります。サーバーからデスクトップにSSHで接続できるという事実は、逆のことができないのは見落としであるか、特定の目的のために設置された何かであると私に言います。
Solarflare

4
あなたは非常に少なく、で...回避政策のために解雇するリスクを回避したい場合、これが唯一の真の解決策である、彼らはあなたが最大であるかを知っているのでKhaledsソリューションを使用する前に、責任者へ。
スヴェン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.