web-dev-qa-db-ja.com

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

私の状況 :

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

サーバーにSSH接続できます。これは、サーバーbに接続したい場合にtrue ipがあるため、サーバーbにそのip(192.168.25.100)でsshするためです。

例:

私のPCから:

ssh [email protected]

次に100.100.100.100で

ssh [email protected]

これにより、sshを使用してサーバーBに移動します

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

例:

私のocから:

[email protected]

私は以下を試しました:

ssh -L 22:localhost:22 [email protected]

成功せず

30
tom91136

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

試す

me% ssh [email protected] -L 2201:192.168.25.100:22

その後

me% ssh localhost -p 2201

サーバーBで終了する必要があります(何かが既にme:2201にバインドされている場合を除き、この場合、別のポートを選択します)。

31
MadHatter

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

ssh -t [email protected] ssh [email protected]

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

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

23
Jeff Strunk

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

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

これはポートからポートへのトンネルをセットアップするのではなく、標準のstdin/outを使用してsshをトンネルします。この方法には、認証するために実際には3つのSSH接続があるという欠点があります。ただし、内部ホストに接続するには、次のように入力します。

ssh myinsidehost2

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

11
liori

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

Host B
  ProxyJump A

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

9
arantius

ssh manページによると、ProxyCommandが正しい方法です

構文は次のとおりです。

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

ProxyJumpについてはすでに言及しましたが、「ジャンプホスト」(-J)コマンドライン引数:

それが何をしているのかがわかったら、構文はかなり簡単です:ssh -J [email protected] [email protected]

0
Jean Spector