私の状況 :
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]
成功せず
問題は、リスナーをlocalhost:22にバインドすることです。すでに聞いているsshdがあります。 ssh接続を介したssh接続のトンネリングは完全に合法であり、私は常にそれを行っていますが、転送リスナー用に未使用のポートを選択する必要があります。
試す
me% ssh [email protected] -L 2201:192.168.25.100:22
その後
me% ssh localhost -p 2201
サーバーBで終了する必要があります(何かが既にme:2201にバインドされている場合を除き、この場合、別のポートを選択します)。
プロキシ経由で内部コンピュータにsshするためにsshポート転送を使用する必要はありません。接続した最初のサーバーでコマンドを実行するssh機能を使用して、3番目のコンピューターにsshで接続できます。
ssh -t [email protected] ssh [email protected]
-t
オプションは、sshに疑似ttyを割り当てることを強制するため、対話型コマンドを実行できます。
これはsshキーでも機能します。マシンAに秘密鍵と公開鍵があり、マシンBとCの承認済み鍵ファイルに公開鍵がある場合は、-A
認証エージェント接続を転送するオプション。
別のソリューションを使用しました。 ProxyCommand
オプションを使用しました(ここでは~/.ssh/config
):
Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i
これはポートからポートへのトンネルをセットアップするのではなく、標準のstdin/outを使用してsshをトンネルします。この方法には、認証するために実際には3つのSSH接続があるという欠点があります。ただし、内部ホストに接続するには、次のように入力します。
ssh myinsidehost2
...そのため、そのトンネルにIPを選択する必要はありません。
OpenSSH 7.3(2016年後半)以降、最も簡単な方法は ProxyJump 設定です。あなたの~/.ssh/config
:
Host B
ProxyJump A
または、コマンドラインで、-J B
。
ssh manページによると、ProxyCommandが正しい方法です
構文は次のとおりです。
ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null
ProxyJump
についてはすでに言及しましたが、「ジャンプホスト」(-J
)コマンドライン引数:
それが何をしているのかがわかったら、構文はかなり簡単です:ssh -J [email protected] [email protected]