OpenSSHクライアントの脆弱性という話で、sshにこっそりroamingという機能が仕込まれていることを知った。その隠し機能に問題があり、さらにデフォルトで有効になっているという話。うーんこれは変なサーバにつなげなければいいだけの話なのかな。それとももっと深刻か。
このroamingが何の機能かというと、moshのように接続が切れてもセッションを続けて、次に接続した時にそのセッションを使える(切れちゃった後に復活できる)という機能のようだ。ただしOpenSSHの場合はサーバに対応する機能が入っていないという欠陥があって、まあ実際にこの機能がうまく動くケースはほとんどないみたい。そもそもRoamingに対応するサーバってあるんだろうか。有料のオプションだったりするのかな。
しかしまあ、、、割と魅力的な機能のように思う。隠す必要ないだろこれ。サーバの実装ができていないからドキュメント化しなかっただけだろう。
で、この種の機能を試すにはmoshを使ってみるのが一番簡単か、と思った。
moshでMacのクライアントからCentOS7のサーバにつなげることを考えると、
- Mac: brew install mosh
- CentOS7: yum install mosh
で、クライアント(Mac)から
- mosh サーバ名
でCentOS7にログインできる。moshは通信のバックエンドにsshを使ってくれるみたいで、サーバ側で新たにサーバを立てる必要はない。moshのクライアントがssh接続後にmosh-serverを起動して、そのmosh-serverとのお話をする。CentOS7のパッケージにはsystemdの.serviceファイルも含まれていないから、独自のサーバがあるわけではないんだと思います。プロトコル上はUDPのやつがあるみたいですけどね。
使用感はsshとさほど変わりません。最大の特長のRoaming機能を見ていくと、moshで接続したままネットを切る。wifiをオフにするとか、そういう操作。やってみると、コンソールの上部に青色で接続が切れてます的なメッセージが出ます。秒読みがあったりして。そして、つなぎ直すと再び操作できる。
これ短時間なら(?)、sshでもTCPのセッションが切れない内は復活が可能なんですよね。moshを使っても、wifi接続を切ってからCtrl-^+.でmoshの接続を切ってしまうと、サーバ側でmosh-serverのプロセスが残りますがre-attachする操作が実装されていないため、screenのようにre-attachできると期待していると痛い目にあうことになる。
このre-attachがないというのも嫌な感じの状態になっていて、detach状態のサーバがあってPIDがいくつ、みたいな表示が出るんですよ。でもそこにattachできないから、表示されているPIDのmosh-serverを自分でkillして回らないとゴミプロセスが残った状態になってしまうという…
まあこれならscreen使ったほうが便利ですね。re-attachがあればsshを捨ててmoshに移行すべきと主張するところでしたが…このへんがmoshが話題に上がってもいまいち普及していく印象を残せていない原因なのかもしれません。