Mac の画面共有でログインできない(リモートマネージメント)
macOS の標準 VNC こと「画面共有」。つまり、別の Mac のデスクトップを遠隔操作できる標準機能ですが、たまに接続できないことがあるので困ります。
特に、ヘッドレス(モニタなし)でサーバー的に使っている場合、いちいちモニタをつなげるのがとても面倒です。セキュリティなどの自動アップデートが行われた場合などに多く発生する気がします。
ちなみに「画面共有」アプリは「アクセシビリティ」には追加済み(システム環境設定の「セキュリティとプライバシー」→「プライバシー」にある「アクセシビリティ」)です。どうしたものでしょう。
原因
アプリや OS のアップデートでキーチェーンアクセスの許可が必要なレベルのアップデートがあった場合、承認されるまでロックされるから。
「重要なセキュリティアップデート」待ちや「規約の確認」待ちなど、適用・承認せずにいた場合、OS が「古いバージョンだとリモート接続が危険」とみなすと OS レベルでブロックすることが多々あります。
これは接続先の Mac だけでなく、接続元の Mac でも発生している可能性があります。
接続先の問題だと勘違いしてしまうケースであるあるなのが、実は手元の Mac で自動アップデートがあったものの、再起動やアップデート内容の確認が完了しておらず、外部へのアクセスが制限されている場合です。SSH 接続や Web ページは見えているので、しょっちゅう勘違いします。
まずは手元の macOS で、お知らせやアップデートがない状態で再起動してから、接続して確認してみます。
それでも接続できない場合は、おそらく対象(接続先)のデスクトップで承認待ちのポップアップなどが表示されていると思います。その場合、一番簡単なのは対象の macOS のデスクトップで許可をするだけです。
問題は、遠隔地に置いてあるヘッドレス(モニタなし)の Mac だった場合です。
クリックするためだけにモニタとマウスを接続するのは面倒なのです。あと別室に置いてあって腰を上げるのすらリモートでしたい時とか、移動するのが面倒な時とか。
対策
この「承認待ち」状態を VNC 接続で解除できないとなると、SSH 接続で何とかするしかありません。
SSH 接続で試せる方法には、大きく 2 通りあります。「キーチェーンアクセスの解除」と「画面共有の再設定」です。
🐒 しかし、OS の大幅なセキュリティ・アップデートなどのうち Apple 社の公開鍵が変更(更新)されるレベルだった場合は、やはり GUI の画面上からパスワードを入れたり、改めて画面共有を設定しないといけません。
ローカル・ネットワーク環境なら「画面共有」の方が軽いのですが、バックアップの接続用としてオープンソースの RustDesk、使い勝手優先なら有償ですが TeamViewer などの遠隔アプリも入れておいた方が無難だと思います。
キーチェーンアクセスの許可をコマンドで操作する
対象の Mac に SSH 接続して、キーチェーンアクセスの許可を行います。
security unlock-keychain
$ ssh user1@keinos-no-macmini.local
Warning: Permanently added the ECDSA host key for IP address 'xxxx::xxxx:xxxx:xxx:xxxx%en0' to the list of known hosts.
Last login: Wed Nov 11 11:59:36 2020
KEINOS-no-MacMini:~ user1$ security unlock-keychain
password to unlock default: <macの管理者パスワードを入れる>
必要なら再起動もしておきます。
$ ssh user1@keinos-no-macmini.local
Warning: Permanently added the ECDSA host key for IP address 'xxxx::xxxx:xxxx:xxx:xxxx%en0' to the list of known hosts.
Last login: Wed Nov 11 12:30:16 2020
KEINOS-no-MacMini:~ user1$ sudo reboot now
Password: <macの管理者パスワードを入れる>
Connection to keinos-no-macmini.local closed by remote host.
Connection to keinos-no-macmini.local closed.
「画面の共有」サービスを再起動(オフ・オン)する
上記でダメだった場合、画面共有に必要な共通鍵が変わってしまったり、不用意なシャットダウンなどで不正な接続元として認識(ブロック)されている可能性があります。
その場合、「画面の共有」サービスを一旦オフにして、入れ直すと鍵の再作成とブロック情報のクリアされるため、直ることがあります。
モニタとキーボードがあればいいのですが、この記事では「ない」ことになっているので、コマンドで ssh
接続経由で「画面の共有」サービスを再起動します。
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -deactivate
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate
- SSH 接続した先での具体的な方法
$ # 念のためにキーチェーンアクセスをアンロックしておく
$ security unlock-keychain
password to unlock default: <macの管理者パスワードを入れる>
$ # 「画面の共有」サービスの無効化
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -deactivate
Password: <macの管理者パスワードを入れる>
Starting...
Removed preference to start ARD after reboot.
Done.
$ # OS の再起動
$ sudo reboot now
Connection to keinos-macmini.local closed by remote host.
Connection to keinos-macmini.local closed.
$ # 「画面の共有」サービスの有効化
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate
Password:
Starting...
Activated Remote Management.
Done.
注意
当然と言えば当然なのですが、あらかじめ SSH 接続ができるように設定しておかないといけません。パスワードによる SSH 接続は打つのが面倒セキュリティ上よくないので、公開鍵認証でログインできるようにしましょう。
- 「macのssh 接続 公開鍵」の Qiita 記事
鍵の作成(署名鍵もしくは公開鍵と秘密鍵のペアの作成)をする際の強度ですが、RSA か Ed25519 で迷ったら Ed25519
を選びましょう。署名専用の鍵で、速く強いためです。
ローカルとリモートの双方の OpenSSH のバージョンが ssh -V
で 6.5 以上なら使えます。
ssh-keygen -t ed25519 -a 100 -C "your_email@example.com or usage or memo"
汎用性を優先する場合は RSA 署名鍵を選択しますが 4096 ビットにしましょう。
ssh-keygen -t rsa -b 4096 -o -a 100 -C "your_email@example.com or usage or memo"
-
-a
オプション -
-C
オプション- この値は備忘録用のコメントです。公開鍵に埋め込まれ、公開鍵を開くか
ssh-keygen -l -f <公開鍵のファイル名>
で確認できます。「何のために作った鍵だったか」と言ったメモ的な用途に使われます。汎用的に使う場合は「誰の鍵か」を知るためにメールアドレスを入力する習慣がありますが、公開されるものであることを念頭においてください。パスフレーズのヒントなどは NG です。
- この値は備忘録用のコメントです。公開鍵に埋め込まれ、公開鍵を開くか