あまり知られてない(ような気がする)sshの多重接続
OpenSSH 5.6/5.6p1リリースの記事をチェックしているとき、リリースノートの「多重(multiplex)接続」ってなんじゃこれ、と思い調べてみたんですが、なかなかに有用なのでちょいとまとめてみました。というか、元ネタはこちらのSSH: Tips And Tricks You Needという記事です。
多重接続というのは、1本のSSHコネクションで複数のセッションを同時に張るという感じのもの。たとえば、OS Xでターミナルを複数開き、それぞれのターミナルウィンドウで1つのサーバーに対しsshコマンドで接続を行った場合、通常はサーバー側では複数のsshdが起動し、それぞれのsshクライアントと通信を行います。いっぽう、多重接続を利用すると1つのsshdが複数のsshと通信する形となり、サーバー側のリソースをより効率的に利用できる、というわけ。
設定は簡単で、クライアント側の.sshディレクトリに設定ファイルと一時ディレクトリを用意するだけ。
$ cd ~/.ssh $ mkdir connections $ chmod 700 connections/ $ vim config
~/.ssh/configの内容は下記のとおり。
Host * ControlMaster auto ControlPath ~/.ssh/connections/%r_%h_%p
あとは、通常通りsshでサーバーに接続するだけ。これだけで、体感できるほど2つめ以降の接続が高速化されます。下記は5つのSSHセッションを張った状態で、6つめのセッションを張ろうとした際の実行速度ベンチマーク。
多重化なし: $ time ssh hylom.******.com uptime 08:13:53 up 22 days, 10:18, 6 users, load average: 0.00, 0.00, 0.00 real 0m2.123s user 0m0.015s sys 0m0.010s
多重化あり: Last login: Tue Aug 24 17:15:34 on ttys006 $ time ssh hylom.******.com uptime 08:18:53 up 22 days, 10:23, 6 users, load average: 0.00, 0.00, 0.00 real 0m0.278s user 0m0.006s sys 0m0.007s
多重化により、だいたい7.6倍くらい速くなっています。ちなみに、この状態で「ps ux」を実行してみるとこんな感じに。
$ ps ux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND hylom 17182 0.2 0.2 8292 1580 ? S 08:21 0:00 sshd: hylom@pts hylom 17183 0.0 0.2 2968 1584 pts/0 Ss+ 08:21 0:00 -sh hylom 17188 0.0 0.2 2968 1584 pts/1 Ss+ 08:21 0:00 -sh hylom 17193 0.0 0.2 2968 1584 pts/2 Ss+ 08:21 0:00 -sh hylom 17198 0.0 0.2 2968 1588 pts/3 Ss+ 08:21 0:00 -sh hylom 17203 0.0 0.2 2968 1580 pts/4 Ss+ 08:21 0:00 -sh hylom 17208 1.0 0.3 3484 1856 pts/5 Ss 08:21 0:00 -sh hylom 17213 0.0 0.1 2432 908 pts/5 R+ 08:21 0:00 ps ux
sshdは1つだけで、接続毎にシェルだけが起動されるようになっていることが確認できます。