SSHによる名前付きパイププロキシ[閉じる]

SSHによる名前付きパイププロキシ[閉じる]

私は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

おすすめ記事