rcmdnk's blog
Last update

English ver.: Access to Mac from other machines
実用SSH 第2版―セキュアシェル徹底活用ガイド

Mavericksに移ってから色々いじってた時に、 一度キーボードが効かなくなってどうしようもなくなってしまった ことがあったんですが、 外部からアクセスして設定変更することで 助かりました。 ということでその辺りの外部からMacに接続する方法についてのまとめです。

sshでログイン

Macでは簡単にsshサーバーを立てられる様になっていて、 システム環境設定 共有リモートログインを有効にするだけで sshで外から入れる様になります 1

この設定画面にIPアドレス(またはホスト名)も書かれてるので 書かれてる通りにsshコマンドを打てば外部から入れます。

Mac特有なのがポートの変え方で、 Linuxの普通のsshだと /etc/sshd_config等で変えるのが通常で、 Macにもこのファイルがあるんですが、 ここでportを

Port 23

等しても変更されません。

変更するには/System/Library/LaunchDaemons/ssh.plist のファイル内のSockServiceNameの値を

 <key>Sockets</key>
 <dict>
   <key>Listeners</key>
   <dict>
     <key>SockServiceName</key>
-      <string>ssh</string>
+      <string>23</string>
     <key>Bonjour</key>
     <array>
       <string>ssh</string>
       <string>sftp-ssh</string>
     </array>
   </dict>
 </dict>

の様に変更します(sshだと22になる模様)。 /etc/sshd_configを変更することで他のオプションはほとんど通常通り 変更できますがssh.plistにあるものでさらに上書きするので ポートについてはこちらで上書きされるようです。

設定を反映するためにsshサーバーを再起動するには共有の中でリモートログインのチェックを 一度外してもう一度つければOK。

また、ターミナルから

$ sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
$ sudo launchctl load /System/Library/LaunchDaemons/ssh.plist

の様にssh.plistをロードし直す事でもOKです。

これで、

$ ssh -p 23 localhost

などとして23番にログイン出来るようになっているはずです。

上の設定ファイルの意味を良く理解してないんですが、 試しに上のSocketの部分を全部削って起動しなおしてみたら 今度はsshd_configでどのポートに設定しても(しなくても) ssh出来なくなってしまいました。 何にしろ何らかの値をssh.plistから与える様になっている様です。

ちなみに、このちょっと変わったsshサーバーの仕様上、ssh-agentも ちょっと特殊で、sshで入った後にそこからGitHub等にsshを使って接続する場合には 注意が必要です2

VNCでログイン

VNCもMacでは設定が簡単で、共有から画面共有を有効にするだけで VNCサーバーが立ち上がります。

VNCのポートは通常5900ですが、こちらも 変更するためにはLaunchDaemons下の /System/Library/LaunchDaemons/com.apple.screensharing.plistの中で、

 <key>Sockets</key>
 <dict>
   <key>Listener</key>
   <dict>
     <key>Bonjour</key>
     <string>rfb</string>
     <key>SockServiceName</key>
-    <string>vnc-server</string>
+    <string>15900</string>
   </dict>
 </dict>

の様にSockServiceNameの値をvnc-serverから好きな番号に変更します3

これで外からWindowsやLinuxからでもVNCで接続出来ますし、 Macからでは(これもOS X 10.7 Lionから?) Finderからメニューの 移動 サーバーへ接続 へ行き、サーバーアドレスに vnc://...と共有に表示されてる様に記入すれば 簡単にVNC接続出来ます。

ダイナミックDNS

上にあるsshやVNCはIPアドレスが必要なので、 固定IPアドレスを使ってない場合、 いつの間にか変わってることがあります。

自宅なので固定IPのサービスを利用してもいいですが、 安くても1000円くらい。 なので、本気でサーバー立てるとかでない限り わざわざ加入するものあれなので、 無料のダイナミックDNS(DDNS)のサービスを使うと良い感じ。

色々とありますが、今はNo-IP というサービスを使ってます。 無料で使っていると、2ヶ月に1回くらい 更新の確認のためのメールが来てサイトにアクセスして 更新の確認の作業をする必要がありますが、 それ程大変な作業でもないので苦にならないと思います。 無料だとホスト名に使えるドメイン名が.zapto.org等 限られたものですが、 有料サービスではもう少し使えるのが増えたりもします。

サイトの方でホスト名を設定して、 Dynamic Update Client (DUC) をインストールして登録しておけばOK。

これでsshでもVNCでもIPアドレスを気にせずに 常に同じホスト名でログイン出来るようになります。

追記: 2014/07/11

ルータ内にいてルータの設定がいじれなかったり、 多段ルータになっていて直接グローバルIPのところまで辿りつけないような場合、 ダイナミックDNSを使うことも出来ませんが、 ルータ越しでポート指定なども出来ない場合にもSSHで接続出来るようにする で書いた様にすればなんとか接続出来る様に出来ます。

追記ここまで

MacからMacに接続したい場合

MacではiCloud どこでもMy Macにを有効にして、 さらに共有ファイル共有の項目を有効にしておくと、 iCloud経由でAppleにMacの情報が送られて 端末の名前と固定ナンバーを組み合わせたホスト名(と結びつけるIPv6のアドレス)が割り当てられ、 そのホスト名だけで常に接続出来る様に出来ます。 iCloud内だけで出来るDDNSみたいなもんだと思っておいて良いんだと思います。

どこでもMy Macを有効にした状態でターミナルからdsn-sd -Eを実行すると

$ dns-sd -E
Looking for recommended registration domains:
DATE: ---Mon 28 Oct 2013---
00:00:00.000  ...STARTING...
Timestamp     Recommended Registration domain
00:00:00.001  Added                          local
00:00:00.002  Added                          icloud.com
                                             - > btmm
                                             - - > members
                                             - - - > 123456789

こんな感じで情報が得られ、最後の数字が端末に割り振られてる数字です。 どこでもMy Macが有効になってないとlocalまでしか表示されないので システム環境設定からチェックしなおして見て下さい。

これと共有で指定しているコンピューター名を組み合わせて

$ ssh [email protected]

とすれば(USERはログイン先Macのユーザー名)外からssh出来ます。 ただし、iCloud経由で同期されているMac同士だけ。

と、以前Lionの時は自分自身へsshを試すことまではできた(と思う)んですが、 Mavericksにアップグレードしてから試したら

ssh: connect to host computer-name.123456789.members.btmm.icloud.com port 22: Operation timed out

となって接続出来ず。

どこでもMy Macを有効にしない場合は

ssh: Could not resolve hostname computer-name.123456789.members.btmm.icloud.com: nodename nor servname provided, or not known

となるので、ホスト名は有効になってるっぽいんですがsshが弾かれてます。

$ ssh -2 -6  [email protected]

みたく認証プロトコルやIPv6をちゃんと指定しても駄目。 一応なんらか動いてるようなので、自分の環境がなにか悪いだけだと思いますが。。。

LogMeIn

画面接続をするのはVNCの代わりに LogMeIn を使うとIPアドレスのこととかも気にしなくて良いので 簡単です。

無料でも基本的な操作は出来るので充分使えます。 また、ブラウザがクライアントになるので クライアント側に特別何かインストールする必要はありません。

モバイルからもアプリがあって (LogMeIn) モバイルからも簡単に接続、操作出来ます。 (VNCでもMocha VNC Lite等モバイルで使えるものもあります。)

他にもTeamViewer と言う似たような物もあります。 使い勝手はLogMeInと同じ様な感じでした。

追記

LogMeInが有料になったのでTeamViewerに乗り換えました。

LogMeInのフリーアカウントが終了なのでTeamViewerに乗り換える

追記ここまで

Sponsored Links
  1. 通常のsshサーバーと違うのか、これを 有効にしてもps -Aなどとしてもsshdは立ち上がってません。 外からsshで入って来た後に見ると動いていて sshされた時だけ立ち上がる?様な感じ。

  2. Macでssh時の’Permission denied (publickey).’の解決法

  3. このファイルが存在するのはOS X 10.7 Lion以降だそうです: How to change the default screen sharing / VNC port number on Mac OS X?

Sponsored Links

« Macでのマウス/トラックパッドの軌跡の加速度/速度の調整 Mavericksでのキーボードレイアウトの設定 »

}