私はSSHを使用してlocalhostからリモートサービスポートを転送することに慣れています。たとえば、次のようになります。
ssh -L 2181:localhost:2182 user@server
(リモートホストポート2182をローカルポート2181に転送)
これで、sshターゲットマシンからTCPサービスにアクセスし、レスポンスをローカルマシンに転送しようとしています。
local-machine:2181 <-- SSH --> remote-machine:2182 <-- netcat/named pipe --> service:2181
注:サービスシステムに直接アクセスすることはできず、SSHを介してのみネットワークにアクセスできます。
名前付きパイプでnetcatを使用しようとしています。
リモートシステムでは:
mkfifo fifo
nc -k -l 2182 <fifo | nc service 2181 >fifo
ローカルマシンで:
echo message | nc localhost 2181
しかし、これはうまくいかないようです。
私もリモートコンピュータで試しました。
nc -k -l 2182 0<fifo | nc service 2181 1>fifo
不運
nc -k -l 2182
ローカルコンピュータから送信されたメッセージをリモートコンピュータに出力します。2181
単にパイプすると、nc -k -l 2182 | nc service 2181
リモートシステムのサービス応答が表示されます。したがって、サービスにアクセスし続け、リモートシステムに戻ることができますが、そこで停止します。
local-machine:2181 <-/- SSH --> remote-machine:2182 <-- netcat --> service:2181
だから、名前付きパイプがSSH接続を介して自分のローカルコンピュータに応答を返さない理由はわかりません。
echo message | nc localhost 2182
リモートシステムのコマンドはローカルシステムに何も出力しないため、何らかの理由でSSHを介して機能しません。
これがなぜ起こるのか、どうやって解決するのかご存知ですか?
助けてくれてありがとう。
答え1
@ysdxが指摘したように
簡単な解決策は次のとおりです。
ssh -L 2181:service:2182 user@server