0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Linux sshポートフォワーディング(トンネル)設定

Last updated at Posted at 2020-04-30

Linuxサーバに掲題の内容を設定する機会があり、
なんだかんだ時間がかかってしまったためメモ。
そして誰かの役に立ってくれればと思い、書いてみました。

やりたかったこと

・Linuxサーバ(Local)にトンネル(local:50000)を設置
・Linuxサーバ(踏み台)からRDSへ接続
・とあるサービス(Linuxサーバ(Local)で動いている)でトンネルを使用してRDSへ接続
・なので自分が接続するためではなく、あくまでなんかのサービス様の利用目的

各情報

Localサーバ

・port 50000をRDSへsshポートフォワーディング

踏み台サーバ

ホスト :「999.999.999.999」
ユーザ名:「fumidai」
証明書 :「/etc/ssh/fumidai.pem」

RDS

ホスト :「RDS.com」
ポート :「3306」

結局いきついたコマンド

上記の各情報を踏まえて以下になりました。
「ssh -o ServerAliveInterval=30 -f -N -L 50000:RDS.com:3306 fumidai@999.999.999.999 -i /etc/ssh/fumidai.pem」

簡単なコマンドの説明

オプション「-o」

「-o」オプションを設定することで、ssh_configに記載されているパラメータを設定できるみたい。
「-o XXXXX=30」とか。

オプション「-f -N」

ポートフォワーディング(トンネル)のプロセスをバックグラウンドにしたい場合に必要。
二つじゃないとだめ、「-f」だけだと無理。

オプション「-L」

Localサーバのlocalポート指定時に使用。
「-R」の場合リモートみたい。詳しくは調べてない。

オプション「-i」

証明書の参照先。

コマンドにいきつくまで大変だったこと。

基本的なことだけど、出たとこ勝負でやるところがあるから何度もこけまくった。

証明書の権限

sshは権限に厳しいです。ちゃんと設定しないと接続してくれません。
参考サイト様:(https://note.mokuzine.net/ssh-permission-denied/)

プロセスが勝手に落ちる

どこのサイト様を見ても、バックグラウンドでトンネル設定を入れて、削除する場合は
プロセスを見つけてkillするとある。
しかし勝手に落ちられてしまうのは勘弁したい。

「-f -N」で動かした以上、バックグラウンドで動いてくれる。
netstatコマンドでも確認したが、ちゃんとListenの状態になっている。
しかし、大体2時間15分後くらいに落ちる。
しかも、プロセス起動して1時間後くらい(Listenのまま放置)に、サービス側に通信させると、
だいぶ放置しちゃったからなのか、ちゃんと通信が行われない。途中で失敗する。
そりゃ、通信も何も無しなので、なんか起きてるんだろうなと思ってました。

詳しく調べてみると、karnel?の仕様か何かで、通信が無い場合は、切れるみたい。
実際にプロセスを実行したターミナルにはプロセスが落ちたタイミングで「Write failed: Broken pipe」
って表示されてた。

参考サイト様:(https://www.riscascape.net/archives/9570)
      :(https://alpha-netzilla.blogspot.com/2011/12/tcp-keepalive.html)
      :(https://qiita.com/kuni-nakaji/items/c07004c7d9e5bb683bc2)

プロセスをどうにか生き永らえさせる

sshには「ServerAliveInterval」等があり、指定された周期・回数で通信を行ってくれる。
これで勝手に死ぬことはなくなりました。
1時間後くらい(Listenのまま放置)してもちゃんと通信も出来ている。
sshdの設定ではこのあたりの設定はデフォルトで「0」動きません。

参考サイト様:(https://qiita.com/ysk24ok/items/2f4ced5edf306fdd9dfb)
      :(http://www.koganemaru.co.jp/cgi-bin/mroff.cgi?sect=5&cmd=&lc=1&subdir=man&dir=jpman-11.2.2%2Fman&subdir=man&man=ssh_config)
      :(https://tech.sv-cat.net/entry/2018/08/21/190127)

今後の課題

といってもやはりプロセスは1回起こせばいいってものじゃない。
多分なんかで落ちてしまう場合があるはず。
通信先の踏み台やRDSが落ちたりしたら、間違いなくプロセスは落ちちゃう。
なので不慮の事故を想定して、再度プロセスを起動する仕組みが必要。
crondで監視して回す予定。systemdでサービス化も考えたけれども、
結局シェル頼みになりそうだから、crondでよさそう。

他にもっと良い手段等ございましたら、ご享受いただけると幸いです。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?