インフラ構築こんにちは、もーすけです。SSHローカルフォワードを使いこなしてますか?SSHを制するものはインフラを制するとも言われています。最近良く使っているのですが、ローカルポートフォワードでhttps接続をする際に間違えやすいポイントがあるので紹介します。下記は、以前に書いたSSHのローカルポートフォワードに関する記事です。基本的な概念や使い方を知りたい方は書きを参照してください。やりたいこと今回やりたいことは、httpsでサービスを提供しているサーバへ、SSHローカルポートフォワーディングを使って接続するということです。該当のサーバへは、ネットワーク上、直接的に接続ができないためにポートフォワーディングを使って接続することをやりたいと考えています。ポートフォワーディングについてわからないよ、という方は上にはった記事をまずご覧ください。具体的なユースケースだと、KubernetesやGrafanaのダッシュボード(管理画面)などインターネットにそのまま公開していないが、接続にhttpsを接続に要求しており、SSH越しで接続したいなどがが考えられます。このブログでのサンプルとして以下を想定します。とあるサブネット内に踏み台のEC2とGrafanaサーバがある。踏み台へはSSH可能で、それ以外からサブネット内に通信することは現状できない。Grafanaサーバはhttps://grafana.mosuke.localでSSLでリッスンしている。行ったこと対象のGrafanaサーバがhttpsで接続が可能なので、ローカル端末のポート5000(任意のポート)を踏み台サーバを経由してGrafanaサーバの443ポートにフォワードすれば問題ないと考えました。下記のようにsshでポートフォワーディング接続をしたあと、ブラウザから接続を試みました。対象のサーバへローカルポートフォワードのため接続する。セッションはそのまま。これでローカルフォワーディングの設定は終わったので、ブラウザから以下に接続すれば接続できると考えていました。実際は接続することができませんでした。それはなぜでしょうか?一度立ち止まって考えてみましょう。何が間違いだったか正しくは以下のようにhttpsプロトコルで接続をしなければいけません。「https」で接続が必要です。考えればアタリマエのことですよね。URLのはじめの<http(s)>の部分はプロトコルで最後の<:5000>の部分はポート番号。httpsは443のポートを一般的に使うが、ポート443がhttpsというわけではありません。そのため、ポート番号にかかわらず適切なプロトコルでの接続が必要です。リダイレクトしてくれるものならばいいですが、そうではないケースも実際にはありました。基本的なことだが、HTTPとHTTPSだと見落としてしまうこともあるので注意してください。まとめ非常に単純なことではあるのですが間違えやすいポイントかと思います。ローカルポートフォワードの接続先で443ポートを指定したので感覚的にhttpsにしていると思いがちです。実際に接続するプロトコルがなにか、改めて見直してみるとこういったミスは軽減できるし、非常に重要なことです。Shopを使ったマイクロサービス体験のハンズオン「捉」2019年振り返りDevOpsの本質を科学的に理解する。LeanとDevOpsの科学を読んで。