autossh

autossh は、ssh 接続が切断された場合に自動的に再接続してくれるプログラムです。

autossh を使用すると、ssh サービスを開始し、監視することができます。

プログラムの問題やネットワークの問題が発生した場合、ssh サービスを再起動できます。¹²³

以下のように使用します。

1
autossh -M 0 -N -f -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -R 8080:localhost:80 user@remote_host

この例では、リモートホスト上でポート 8080 を開き、ローカルホストのポート 80 に転送します。⁴

ソース: Bing との会話 2023/5/5

ポートフォワード (-L, -R, -D)

  • -L : ローカル -> リモート
  • -R : リモート -> ローカル
  • -D : ダイナミック(SOCKS)

-N

-N オプションは、ssh 接続を開始して、リモートシェルを実行しないようにします。¹²³

つまり、ssh 接続を開始するだけで、リモートシェルを実行しないため、ssh 接続が必要な場合に使用されます。¹

ソース: Bing との会話 2023/5/5

-M

-M オプションは、autossh で SSH トンネルを確立する際に、SSH トンネルの死活監視用に別途ポートを開放するためのオプションです。²³

-M オプションを指定すると、autossh は、指定されたポート番号をベースポートとして使用し、その上のポート番号(ベースポート+1)をエコーポートとして使用します。¹²

-M 0 だとモニターループがオフされます。

ソース: Bing との会話 2023/5/5 (1) 混乱しがちな「SSH トンネルの確立方法」をイメージ図とセット …. https://gigazine.net/news/20210209-ssh-tunnel/. (2) autossh の “-M” オプションの正体. autossh… | by Goro Yanagi …. https://medium.com/veltra-engineering/autossh-6aae10b5eb12. (3) autossh のコマンド・オプション例 元 RX-7 乗りの適当な日々. https://www.na3.jp/entry/20200416/p1. (4) SSH ポートフォワーディング機能のおさらいと利用例 Qiita. https://qiita.com/kazu_ppp/items/55e11b1b64683e3b85a8.

-f

バックグラウンド実行します。

例: RDS MySQL に EC2 経由で接続

1
2
3
4
5
#!/bin/bash
set -a; source $1; set +a
PORT=${2:-3306}
#
autossh -M 0 -F $SSH_CONF server -N -L $PORT:$DB:3306 -4

env ファイル:

1
2
SSH_CONF=.secrets/ssh.devel-masters.conf
DB=devel.caoopx9dbdd0.ap-northeast-1.rds.amazonaws.com

ssh.conf ファイル:

1
2
3
4
5
Host server
  HostName 10.180.38.225
  User ubuntu
  Port 22
  IdentityFile /Users/hdknr/Projects/.secrets/keys/devel-vpc.pem