SSHトンネルを介してSSHを転送する


30

私の状況 :

Me(localhost)->サーバーA(ip:100.100.100.100)=>(サーバーB(ip:192.168.25.100)、server ....)

サーバーbに接続したい場合、真のipを持っているので、サーバーにSSHで接続できます。ip(192.168.25.100)でサーバーbをsshします

例:

私のPCから:

ssh user@100.100.100.100

その後、100.100.100.100で、

ssh user@192.168.25.100

これにより、sshでサーバーBにアクセスできます

サーバーbに直接接続する場合はどうなりますか?どうやってやるの?

例:

私のOCから:

ssh@192.168.25.100

私は次を試しました:

ssh -L 22:localhost:22 user@100.100.100.100

成功せずに

回答:


30

問題は、リスナーをlocalhost:22にバインドすることです。既にsshdがリッスンしています。ssh接続を介したssh接続のトンネリングは完全に合法であり、私は常にそれを行いますが、転送リスナー用に未使用のポートを選択する必要があります。

試して

me% ssh user@100.100.100.100 -L 2201:192.168.25.100:22

それから

me% ssh localhost -p 2201

最終的にサーバーBに移動する必要があります(何かが既に私にバインドされていない限り:2201、この場合、別のポートを選択します)。


早速のお返事ありがとうございます!それは動作しますが、ssh(22)だけでなくすべての接続を転送するにはどうすればよいですか?
tom91136

1
これは、ポートフォワーディングだけでなく、探している本格的なVPNです。そこでは、VPN-オーバーのsshを行う方法についての過去記事だbodhizazen.net/Tutorials/VPN-Over-SSHは、再び、それはA.でssh経由でリモートrootアクセスを必要とするか、またはあなたがOpenVPNのか、他のVPNソリューションに見ることができますが、これらを機能させるには、Aに対する特権が必要です。
MadHatterは、モニカを

最後に、Aにのみ接続したい場合はどうすればよいですか?
tom91136

me% ssh user@100.100.100.100; すでにカバーしていなかったのですか?または、「本格的なVPNをAにしたい場合はどうなりますか?」という意味ですか?
MadHatterは、

1
SSH経由のVPNが必要な場合は、サーバーにルートアクセス権はありませんが、Pythonはあります。sshuttleを試してください
アンドレパラメス

23

プロキシを介して内部コンピューターにsshするためにsshポート転送を使用する必要はありません。3番目のコンピューターにsshするために、最初に接続するサーバーでコマンドを実行するssh機能を使用できます。

ssh -t user@100.100.100.100 ssh user@192.168.25.100

この-tオプションは、sshに強制的にpseudo-ttyを割り当てるため、対話型コマンドを実行できます。

これはsshキーでも機能します。マシンAに秘密鍵と公開鍵があり、マシンBとCの承認された鍵ファイルに公開鍵がある場合-A、認証エージェント接続を転送するオプションを使用できます。


10

別のソリューションを使用しました。私はProxyCommandオプションを使用しました(ここで~/.ssh/config):

Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i

これはポート間トンネルを設定せず、代わりに標準のstdin / outを使用してsshをトンネルします。この方法には、実際に認証するssh接続が3つあるという欠点があります。ただし、内部ホストに接続するには、次のように入力します。

ssh myinsidehost2

...そのトンネルにIPを選択する必要はありません。


1
これは、私が動作していると思う唯一の種類のSSHスタッキングです。私は試しましたcorkscrewncnetcat)、これほどシームレスに動作するものはありません。
プオングエン

7

sshのマニュアルページによると、ProxyCommandは正しい方法です

構文は次のとおりです。

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null

-Wこの質問に回答したときにオプションが存在したかどうかはわかりません。しかし、sshクライアントの新しいバージョンで、私はあることの組み合わせを同意ProxyCommandし、-W好ましい方法です。コマンドラインでの使用方法とセクションの例の両方を示すコンテキストを追加することもできます.ssh/config
カスペルド

SSHのどのバージョンに-Wコマンドがあり、どのバージョンにないのかを示すchangelogs / version情報をどこで見つけるか考えていますか?少しグーグルで答えがすぐに得られなかった
...-dmh

-W2010年にリリースされたOpenSSH 5.4で導入されました。そのため、答えはイエスです@kasperd
0xC0000022L

7

OpenSSH 7.3(2016年後半)以降、最も簡単な方法はProxyJump設定です。あなたの~/.ssh/config

Host B
  ProxyJump A

または、コマンドラインで、、-J B

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.