echo ${MY_OUTPUT} >>blog

AWSやその他勉強した内容をぶちまける

テザリングでSSH接続タイムアウトに悩んだ話

最近、ノマドで作業をすることが多くなってきましたが、WiFi環境が見つからないために
仕方なくテザリングで作業することがよくあります。

その際に、(私のスマホだけかもしれないのですが)テザリングSSH接続すると、
1〜2分程でタイムアウトしてしまい、とても作業できる環境ではありませんでした。

今回はその解決方法についてです。

目的

SSHクライアントから一定間隔で応答確認をさせ、SSH接続を維持する。
(タイムアウトさせない)

環境

- スマホ   :docomo SO-02F (Xperia Z1f)
- クライアント:Macbook Air (OS X 10.10.4)
- サーバ   :Amazon EC2 (Amazon Linux AMI 2015.03)



タイムアウト値の確認

まずは、何も設定しない状態でSSH接続を行い、タイムアウト値を調べます。

1分経過後

$ ssh -i [EC2インスタンスの認証鍵] ec2-user@[EC2インスタンスのIPアドレス]
Last login: xxx xxx xx xx:xx:xx xxxx from xxxxxxxx.xgsspn.imtp.tachikawa.spmode.ne.jp

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
33 package(s) needed for security, out of 66 available
Run "sudo yum update" to apply all updates.
$ 
$

1分後にEnterを押しましたが、まだSSH接続は切断されていません。

2分経過後

$ ssh -i [EC2インスタンスの認証鍵] ec2-user@[EC2インスタンスのIPアドレス]
Last login: xxx xxx xx xx:xx:xx xxxx from xxxxxxxx.xgsspn.imtp.tachikawa.spmode.ne.jp

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
33 package(s) needed for security, out of 66 available
Run "sudo yum update" to apply all updates.
$ Write failed: Broken pipe

2分後にEnterを押すと、「Write failed: Broken pipe」のメッセージが出力され、
SSH接続が切断されました。
この後、1分半も試しましたが、SSH接続が切断されてなかったため、おそらく
タイムアウト値は2分と思われます。

SSHタイムアウトを抑制する設定

正確には、タイムアウトする前にSSHクライアントから応答確認を行い、
接続をつなぎ止める設定です。
以下のように設定します。

$ grep ServerAliveInterval /etc/ssh_config
#   ServerAliveInterval 0
   ServerAliveInterval 60

ServerAliveInterval [設定値(s)] を設定すると、設定時間間隔でサーバに対して応答確認を行い、
結果としてタイムアウトカウントをリセットできます。

デフォルトのServerAliveInterval 0 だと応答確認を行いません。
タイムアウト値が2分(120秒)なので、今回は60秒間隔に設定しました。

接続テスト

2分経過後もSSH接続が切断されないことを確認します。

$ ssh -i [EC2インスタンスの認証鍵] ec2-user@[EC2インスタンスのIPアドレス]
Last login: xxx xxx xx xx:xx:xx xxxx from xxxxxxxx.xgsspn.imtp.tachikawa.spmode.ne.jp

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
33 package(s) needed for security, out of 66 available
Run "sudo yum update" to apply all updates.
$ 
$

先ほどと同じ方法で確認しましたが、2分経過後もSSH接続は切断されていないようです。
これなら安心して作業に打ち込めます。

まとめ

いかがだったでしょうか。
私はこの設定にだいぶ救われました。

もしかしたら、もっと他にいい手があるかもしれませんので、知っている方は
教えていただければと思います。