LoginSignup
282
243

More than 3 years have passed since last update.

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

Last updated at Posted at 2016-12-14

はじめに

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

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

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

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によるポートフォワーディング

282
243
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
282
243