Sshを使用したリモートポートフォワーディングの次のユースケースがあります。ローカルネットワークにライセンスサーバー(L)があります。ターゲットサーバー(T)からライセンスを取得できるようにしたい。 Tには、ジャンプボックス(J)を介してのみアクセスできます。ライセンスが機能するためには、Tにアクセスできる2つの特定のポートが必要です。ここで開発しない理由から、Tからローカルに転送したくありません。したがって、要約すると、リモート転送ポート、たとえば次のように1025としましょう。
L-> J-> T
今のところ、次のように2つのリモートポート転送を行っています(接尾辞「_IP」は関連するIPアドレスを指します)
そして、すべてが正常に機能します。
使いやすさとセキュリティ上の理由から、転送は1つのトンネルまたは少なくとも1つのコマンドで実行する必要があります。理想的には、転送されたポートはJから利用できないようにする必要があります。sshのドキュメントとブログを読んだ後、Lから次のコマンドを思いつきました。
ssh -fNT -R T_IP:1025:127.0.0.1:1025 user@J_IP
動作しません。 Jのsshdログは、認証が成功したことを示しています。まず第一に、それは理論的に正しいですか? Tを追加で構成する必要がありますか?
NB:私は通常、自分のマシンでローカルポート転送を使用してTに直接sshするために同様のことを行っていますが、かなり似ていると思いました。
ssh -fNT -L [127.0.0.1:]2222:T_IP:22 user@J_IP
ssh -p 2222 user@localhost
関連する構成の詳細:Jの/ etc/ssh/sshd_configには次のオプションがあります。
AllowTcpForwarding yes
GatewayPorts yes
実行されたテスト:私はLinuxの専門家ではないので、考えられるすべての原因を取得することはできません。働くために。これらは、それが試されたシナリオです:
Versions:関連するすべてのマシンはcentos/RHEL7.5を使用しています。 openssh7.4が使用されています。 ssh -Vの結果:
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
PS:Stackでの最初の質問です。おそらく、重要な情報を忘れています。コメントでできるだけ反応的になるように努めます。
私はついに別のSlackExchangeコミュニティで私の問題の解決策を見つけました。 この投稿 を参照してください。
これは、-Jオプションを使用することで構成されます(これはProxyCommandまたはProxyJumpオプションのショートカットですが、openssh> = 7.3で使用できます)。私のユースケースに適用すると、Lサーバーから次のようになります。
ssh -fNT -R 1025:127.0.0.1:1025 -J user@J_IP user@T_IP