Help us understand the problem. What is going on with this article?

SSHポートフォワーディングを知った話

はじめに

新しいわけでも使うのが難しいわけでもないですが、単純に知らなかったので共有。。

ポートフォワーディングとは

複数のサーバーの管理をする時に使える技術。

AとBというサーバーを接続したいが、セキュリティやネットワークの問題で、直接接続できない時に使う。
AとBの間にCというサーバーを置き、Cを経由して間接的に接続できる。

どう使うのか?

  • ローカルのポートをリモート先に転送したい時

例えば、自分のPCから、ネットワークの都合上、直接接続できないAというwebサーバにBというサーバを経由して接続するとき

ssh hostB -L 8080:hostA:80 -N

-LオプションはLocalのことを表します。
-Nオプションはリモートのコマンドを実行せずに待機状態にするためのもの。ポートフォワーディングをする時によく使われます。

  • リモート側のポートをローカルに転送したい時

例えば、Cという外部のネットワークにあるサーバーの1010というホストから、ローカルを経由してhostDに接続するとき

ssh hostC -R 1010:hostD:22 -N

-RオプションはRemoteのことを表す。

  • 実際にやってたことは

実際にはネットワーク1にあるwebサーバからネットワーク1にあるtestサーバーを経由して、ネットワーク2にあるDBに接続する、
みたいなことをやっていて、調べるきっかけになりました。

なので、以下のような内容をwebサーバーからやっていたんだとわかりました。
(testサーバーのhostをTEST、DBサーバーのhostをDBとすると)

ssh -L TEST 3000:DB:3306 -N

※3000っていうのは適当、3306はmysqlのデフォルトのポート

セキュリティ的に大丈夫?と疑問になった

セキュリティ的にOKなのって思いましたが、心配は無用でした。

上記の場合ですと、testサーバーの自分自身が3000ポートに対して行う通信だけが、DBサーバーに転送されるようになっています。
つまり、testサーバーから操作をしないと受け付けないわけで、testサーバーを経由したら転送されるというわけではないようです。
そして、これをローカル通信と呼ぶそうです。

とはいえ、データの受け渡しの間(testサーバーからDBサーバーの間)はセキュアではないので、大事な内容のものはなるべくやらないほうが良さそう。やるにしても期間限定。

その他のオプション

その他、sshの様々なオプションを組み合わせて接続することが多いので、この際によく使いそうなものは覚えておこうと思います。

-i : 秘密鍵の指定をします。
-C : 圧縮して転送します。データが大きいものとかは圧縮したほうが通信がはやそう。
-f : バックグラウンドで実行させます。

実際にサーバーに設定を保存しておくには?

一時的にコマンド打つなら上記のような感じで問題ないのですが、長いコマンド打つの面倒ですし、覚えてないよっていう場合は~/.ssh/configの中とかに書いておけばいいようです。
例えばこんな感じ

Host [中継させるサーバーのIPアドレス]
LocalForward [転送先のポート] [転送先のIPアドレス]

最後に

身近にsshコマンドは使っていましたが、恥ずかしながらこういうことができるのを全然知らなかったので、勉強になりました。
何度も頻繁に使うものではないですが、たまに使えるし、知らないと使えないので、きちんと覚えておこうと思います。

参考にした記事
SSHポートフォワード(トンネリング)を使って、遠隔地からLAN内のコンピュータにログインする
SSHによるポートフォワーディング

Ayaka14
エンジニアとして働いてます。メインはRuby on Rails。エンジニア以外のことも幅広くできるようになりたいな。。
atrae
People Techカンパニーとして、転職サイトGreen, ビジネスマッチングアプリyenta, 組織改善プラットフォームwevoxなどのサービスを運営。全ての社員が誇りを持てる組織と事業の創造にこだわり、関わる人々がファンとして応援したくなるような魅力ある会社であり続けることを目指しています。
https://atrae.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away