scramble cadenza

技術ネタのガラクタ置き場

mac に外部から ssh 接続する

イントロ

訳あってリモートで自宅の macssh 接続したいなーと思ったことがあり、調べてみたことがある。

どうやらMacに外部からアクセス出来るようにする方法 - rcmdnk's blog の設定を行えば、可能になるそうだ。

試したら本当にできてしまった。

じゃあこの設定を on にしたら、sshd が立ち上がる、ということなのかな?と思って見てみると

% ps aux | grep sshd                                                                                                                        
xxxx       30523   0.0  0.0  2432768    536 s003  R+   12:02PM   0:00.00 grep --color=auto sshd

って言われた。あれ?立ち上がってない。
じゃあどうしてログインできるのだろう? と思って調べてみた記録です。

実験

試しに自分自身に ssh でログインしてみる

% ps aux | grep sshd                                                                                                                        
xxxx           30388   0.0  0.0  2432768    500 s003  R+   12:01PM   0:00.00 grep --color=auto sshd
root           30404   0.0  0.0  2443004    568   ??  Ss   12:02PM   0:00.00 /usr/libexec/launchproxy /usr/sbin/sshd -i

sshd が居た。

だが接続を切ると

% exit                                                                                                                                      
Connection to 192.168.1.xxx closed.
# ちょっと待つ
% ps aux | grep sshd                                                                                                                        
xxxx       30523   0.0  0.0  2432768    536 s003  R+   12:02PM   0:00.00 grep --color=auto sshd

sshd が居なくなる。
な〜ぜ〜(古い)

調査

launchproxy などというものが仲介しているっぽいので、調べてみる
launchproxy(8) Mac OS X Manual Page
どうやら launchd が親玉で、それが launchproxy を handle しているらしい

じゃあ launchd ってなんぞや?と思って調べてみるとココ に詳しい説明が書いてあった。

ざっくりとまとめると以下の様なことらしい。

  • launchd ≒ xinetd
    • xinetd についてはxinetd スーパーデーモンの設定がとてもわかりやすい。
    • launchd は「どういうパケットが来たら、どのサービスを起動させるか」に責務を置くデーモン
    • launchd はパケットが来たことを監視するスーパーデーモンで、パケットが来たら launchdproxy を起動させる。
    • 常に sshd が立ち上がっている状態より、メモリの節約になる
  • crond ≒ launchd
    • 設定ファイル(launchd.plist) の書き方によっては、定期実行もお手の物
      • 要するに cron
  • init.d ≒ launchd
    • 設定ファイル(launchd.plist) の書き方によっては、初期に立ち上げるサービス定義も可能
      • init.d スクリプトのようなものが、設定ファイルで書ける
  • launchd の操作自体は launchctl コマンドが別に用意されていて、これで操作する

色々な linux のデーモンが統合化されたイケメンってことなのでしょうか。
「launchd cron」とかでググると他にも沢山情報は出てくる。

結論

おまけ

後日よく探したら launchd - Wikipedia に遥かに詳しい説明があった。
ギギギ...(これも古い)