SSHトンネルのタイムアウト切断防止

例えばプロキシサーバを経由したSSHトンネルなど作っていると、
トンネルを利用しているアプリケーションが無通信状態になったときに
プロキシサーバがタイムアウトを感知して切断してきます。
それを防ぐにはSSHトンネルを
シェルも使える設定(Nオプションをつけない)で開き、
何か定期的に文字を出力するようなコマンドを実行しておけばいいのです。

そのようなコマンドはシェルスクリプトで作ってもいいのですが、
UNIX(POSIX)全般で使えるようここはC言語で組んでみましょう。
SSHトンネルを作るユーザでログインして以下を実行します。

$ cd ~
$ mkdir keepalive
$ cd keepalive
$ touch keepalive.c

ここでファイル”keepalive.c”の内容を以下のようにします。

#include 

int main(void)
{
    while(1){
        printf("\n");
        sleep(60);
    }
}

そして以下を実行してコンパイルします。

$ gcc -o keepalive keepalive.c

実際にトンネルを張った後に

$ ./keepalive/keepalive

を実行しておけば、60秒に1度通信が発生して
トンネルのタイムアウト切断を防ぐことができます。

なお、sshのコマンドの末尾に”./keepalive/keepalive”をつけて
自動実行させてもだめなのでご注意を。