どこでもMy Mac完全終了
macOS Mojaveで廃止された標準リモートデスクトップ機能どこでもMy Mac
(Back To My Mac)が、7月1日で旧バージョンのmacOSも含め完全に終了するようです。
さらば無料の公式リモート。「どこでもMyMac」が全macOSから削除予定 | ギズモード・ジャパン
**「有料の公式アプリへの移行を推奨」**とのことですが、なかなかいい値段します(9,800円)。
ぶっちゃけ自分もまわりもどこでもMy Macを使ってる人を見たことなかったんですが、標準の画面共有機能を利用してほぼ無料で似たようなことやってみようと思い立ちました。
macOSの画面共有=VNC
macOSの画面共有機能は、実はいにしえのVNCが使われています。
Windows独自のRDP
もよくできていますが、同じくらい快適だったのでしばらく独自プロトコルだと思っていました。
なので上手くトンネルさえ掘ればどこからでもリモートデスクトップ接続できるはずです。
トンネルでリモートデスクトップ「ここ掘れMy Mac」
それでここ掘れMy Mac
(Tunnel To My Mac)。もうその名の通り、ローカルとリモートからそれぞれSSHでトンネル掘ってVNCするだけです。
この例では、リモート接続されるサーバーは、自身の5900
ポート(VNC待ち受けポート)を中継するSSHサーバー上の59001
ポートに転送します。次にリモート接続するクライアントは、その中継するSSHサーバー上の59001
ポートを自身の59001
ポートとして転送します。
操作するクライアント上でlocalhost:59001
に接続すると、操作されるサーバーの5900
ポートにつながるわけです。
必要なもの
- インターネットに接続された、SSHでログインできるサーバー(1台くらいありますよね!?)
操作されるサーバー側の準備
下準備
- 操作されるサーバーで画面共有サービスを有効にする(システム環境設定→共有→画面共有にチェック)。
- SSHサーバーへ秘密鍵でSSHログインできるようにする。
- 操作されるサーバーに
autossh
をインストールする。
SSHでログインはいつものssh-keygen -t rsa -b 4096
などでid_rsa.pub
を生成し、SSHサーバーのauthorized_keys
に追加する操作です。
autossh
は接続が切れたときに再接続してくれるSSHクライアントです。
brew install autossh
でインストールしてもいいですし、他のMacから/usr/local/bin/
などにバイナリをコピーしても大丈夫です。その場合、chmod a+x /usr/local/bin/autossh
で実行可能にすることをお忘れなく。
起動時にautosshで自動ログイン
操作されるサーバーは、起動したときに自動で永続的なSSHトンネルを掘るように設定します。
コマンドとしてはこんな感じです。
autossh -M 0 -N -C -R 59001:localhost:5900 -i "id_rsaのパス" -o StrictHostKeyChecking=no ユーザー名@SSHサーバー
これをLaunchdに登録します。/Library/LaunchDaemons/tunnel-to-my-mac.plist
として次のファイルを作成してください。root
権限が必要です。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>tunnel-to-my-mac</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/autossh</string>
<string>-M</string>
<string>0</string>
<string>-N</string>
<string>-C</string>
<string>-R</string>
<string>59001:localhost:5900</string>
<string>-i</string>
<string>秘密鍵id_rsaのパス(例 /Users/me/.ssh/id_rsa)</string>
<string>-o</string>
<string>StrictHostKeyChecking=no</string>
<string>USER@SSHサーバー</string>
</array>
</dict>
</plist>
次のコマンドを実行します。これは手元の環境ではroot
でなくても動作しました。
launchctl unload /Library/LaunchDaemons/tunnel-to-my-mac.plist
launchctl load /Library/LaunchDaemons/tunnel-to-my-mac.plist
launchctl start tunnel-to-my-mac
MacではなくSSHサーバー上で次のコマンドを実行して、以下のように59001
での待ち受けがあれば準備完了です。
tcp 0 0 127.0.0.1:59001 0.0.0.0:* LISTEN
tcp6 0 0 ::1:59001 :::* LISTEN
操作するクライアント側の準備
下準備
- SSHサーバーへ秘密鍵でSSHログインできるようにする。
- 操作するクライアントに
autossh
をインストールする。
クライアントからのトンネルを掘る
次のコマンドを実行します。
autossh -M 0 -N -C -L 59001:localhost:59001 -i "id_rsaのパス" -o ユーザー名@SSHサーバー
これでSSHサーバーを介して、クライアントの59001
がVNCサーバーの5900
にトンネル接続されました。
VNCクライアントで操作する
Macの画面共有アプリを起動します。画面共有アプリは、/System/Library/CoreServices/Applications
にあります。
汎用的なVNCクライアントとしても安定しているので個人的にも重宝してます。
ダイアログにlocalhost:59001
と入力して無事に接続されると、サインインのダイアログが表示されます。以上で完了です!
アレンジ
複数のVNCサーバーを登録する
今回は59001
を使いましたが、59002
、59003
…と別々のポートを使えば複数のVNCサーバーにリモート接続できます。
openコマンドで画面共有を開く
macosのopen
コマンドはvnc://
プロトコルに対応しているので、次のコマンドでも画面共有アプリを開くことができます。
autossh
での接続とopen
コマンドを組みあわせたシェルスクリプトを作ってもいいかもしれません。
open vnc://localhost:59001
クライアント側から常時接続
頻繁に接続するのであれば、クライアント側でもLaunchDaemons
ディレクトリにplist
ファイルを作成して常時トンネル接続するのもよいでしょう。
macos以外にも
汎用的なVNC接続なので、LinuxやWindowsにもきっと応用できます。
最後に
訳あって最近はTeamViewer BUSINESSを使ってきたのですが、なかなか高いので自前のリモートデスクトップネットワークを作ってみようと思いました。どちらかというとその動機が強かったです。
以前、この記事で用意したConoHaの630円VPNサーバーを利用しました。
高速VPNを最速3分でスタート ConoHaで月額630円
https://qiita.com/miyanaga/items/590b25596d8a716e7e68
630円で、自分専用VPNとリモートデスクトップネットワークが手に入るならお得ですね!