![Docker 公開ポート経由で SSH ローカル トンネリングにアクセスする](https://rvso.com/image/1654583/Docker%20%E5%85%AC%E9%96%8B%E3%83%9D%E3%83%BC%E3%83%88%E7%B5%8C%E7%94%B1%E3%81%A7%20SSH%20%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%20%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%99%E3%82%8B.png)
次のような設定になっています:
[OpenSSH server] <---> [Docker container with SSH client] <---> [host machine]
私の Docker コンテナは、一種の SSH 接続マネージャーです。ポートを転送している OpenSSH サーバー上で実行されているサービスは、Web サーバーです。
コンテナ内からは、curl
トンネルポートを正常に使用できます。しかし、同じポートをホストに公開し、curl
ホストからアクセスしようとすると、
curl: (56) Recv failure: Connection reset by peer
これはトンネルを設定するために使用している SSH コマンドです:
ssh -nNT -L 3000:*:9413 OPENSSH_SERVER_URL
このコンテナを実行するには
docker run --rm --name test -p 3000:3000 ssh-connection-manager
コンテナにログインすると、curl
応答が得られます:
docker exec -it --entrypoint sh test
# curl localhost:3000
Hello!
公開されたポートを介してホストから同じことを実行することはできません。
$ curl localhost:3000
curl: (56) Recv failure: Connection reset by peer
何が足りないのでしょうか? SSH クライアントの接続オプションか OpenSSH サーバーの構成の問題だと思いますが、よくわかりません。