mac に外部から ssh 接続する
イントロ
訳あってリモートで自宅の mac に ssh 接続したいなーと思ったことがあり、調べてみたことがある。
どうやら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
- 設定ファイル(launchd.plist) の書き方によっては、定期実行もお手の物
- init.d ≒ launchd
- 設定ファイル(launchd.plist) の書き方によっては、初期に立ち上げるサービス定義も可能
- init.d スクリプトのようなものが、設定ファイルで書ける
- 設定ファイル(launchd.plist) の書き方によっては、初期に立ち上げるサービス定義も可能
- launchd の操作自体は launchctl コマンドが別に用意されていて、これで操作する
色々な linux のデーモンが統合化されたイケメンってことなのでしょうか。
「launchd cron」とかでググると他にも沢山情報は出てくる。
結論
- sshd は立ち上がってなくても、Macに外部からアクセス出来るようにする方法 - rcmdnk's blog の設定を行えば、外部から ssh 接続可能
- 恐らくこの設定は launchd の設定を良しなにしてくれるもの
- デーモンが立ち上がってなくても、心配なし。
おまけ
後日よく探したら launchd - Wikipedia に遥かに詳しい説明があった。
ギギギ...(これも古い)