古い記事
ランダムジャンプ
新しい記事
ここ最近、私を悩ます Mac OS X での困り事。

(1) Terminal から ssh でログインしてもしばらくすると切れちゃう。
(2) sshfs を使ってると同様に接続が切れるんだけど、
    そのときうっかり Finder で変なところをいじると
    OS が固まっちゃう[2008-01-27-1]

どうしたものかなあ、と思ってたらこんなページを発見!
- keep-alive for ssh
  ttp://www.geocities.co.jp/AnimeComic/1098/documents/unixmemo/\
  ssh-keepalive.html
  http://hnw.jp/documents/unixmemo/ssh-keepalive.html
  (追記080228: 新URLを教えて頂きました。感謝!)

これを読んで、
プロトコルが SSH2 のサーバ (例えば、*.sakura.ne.jp) は
config ファイルに下記の設定をして対処。
ClientAliveInterval 15
ClientAliveCountMax 3
ログインはこんな感じ:
slogin FOO.sakura.ne.jp -l FOO -2 -i ~/.ssh/config-ssh2

プロトコルが SSH1 のサーバについては上記の方法ではダメ。
ssh に Heartbeat パッチをあてて、config ファイルに
Heartbeat 300
と書くのがいいらしい(SSH2 のときも足すべし)。というわけで、
「KoshigoeBLOG: OSXのsshにheartbeatパッチ当てて入れ直した」
(http://blog.koshigoe.jp/archives/2006/12/osxsshheartbeat.html)
の手順にそってインストール。
curl -O http://www.openssl.org/source/openssl-0.9.7l.tar.gz
tar xvzf openssl-0.9.7l.tar.gz

cd openssl-0.9.7l
./config
make
make test
sudo make install

cd ../
curl -O ftp://ftp.iij.ad.jp/pub/OpenBSD/OpenSSH/portable/openssh-4.5p1.tar.gz
tar xvzf openssh-4.5p1.tar.gz
curl -O http://www.sc.isc.tohoku.ac.jp/~hgot/sources/openssh-4.4p1-watchdog.patch.tgz
tar xvzf openssh-4.4p1-watchdog.patch.tgz

cd openssh-4.5p1
patch -p0 < ../openssh-4.4p1-watchdog.patch
./configure --with-ssl-dir=/usr/local/ssl
make
sudo make install
実行バイナリは /usr/local/bin/ 以下に入ります。
今までのは /usr/bin/ 以下に。
あと、スマートじゃないけど、ログイン先で下記を実行する手もあるそうな。
ping -i 300 localhost &

さて、sshfs についてだけど、あまり情報がないので、とりあえずの対処。
こういうスクリプト (keepalive.sh) を書いて、
#!/bin/sh
while [ 1 ]
do
  touch $1
  sleep 60
done
こんな感じでローカル側で実行:
keepalive.sh /Volume/remote_host/a.txt &
最初は「tail -f」を使おうかと思っていたのですが、
どうやら MacFUSE+sshfs では機能しないようで断念。

追記080227: 上記でいろいろと説明してきましたが、
Mac OS X (my MacBook) の ssh (OpenSSH_4.5p1) ならば、
実は ~/.ssh/config に以下を足すだけで良いとの話も!
ServerAliveInterval 60
情報ありがとうございました!
- ADSLのルータ越えしてSSH接続していると切れてしまう問題
  http://masaru.org/diary/20070115.html#p03