自宅のMac miniにて,Chrome Remote Desktopがうまく動いてくれないのでVNCが効くようにした.
Host A:VNCで接続したい端末.今回はmacOS.
Host B:HostAに接続可能なSSHサーバ(踏み台).今回はRHEL(Linux).
Host C:HostBに接続可能なクライアント端末.今回はWindows.
とする.
Host A:VNCサーバ・SSHサーバを有効に
Macの場合,[システム環境設定]→[共有]の中の
- [画面共有]
- [画面共有]→[VNC使用者が画面を操作することを許可]
- [画面共有]→[VNC使用者が画面を操作することを許可]→[パスワード]を設定
- [リモートログイン]
- [リモートログイン]→[リモートユーザのフルディスクアクセスを許可]
にチェックを入れる.
(本件とは関係ないが,ここでAirPlayレシーバーにもチェックを入れておくとiPhone/iPadなどからMacの画面にミラーリングできるようになる.)
また,[システム環境設定]→[省エネルギー]の中の
- [ネットワークアクセスによるスリープ解除]
にチェックを入れて,スリープに入っても自動で復帰してくれるようにしておく.
Host B:特にすることはない
外からSSHでログインできる & Host AにSSHでログインできるならば問題ない.
Host A宛の公開鍵やConfigなどは生成しなくてよい.
Host C:VNC・SSH接続設定
SSH設定(踏み台,ポートフォワード)
ssh-keygen -t ecdsa -b 521 などにより,
秘密鍵 ~/.ssh/id_ecdsa
公開鍵 ~/.ssh/id_ecdsa.pub
が存在しているとする.
このとき,~/.ssh/configに以下の通り記述する.
コメントに沿って,適宜値を変更する必要がある.
# ここから
Host *
ServerAliveInterval 60
ServerAliveCountMax 10
Host host_A
# host_A内のユーザ名を指定
User hoge
# host_C内にある,host_Aとの認証に使用する秘密鍵を指定
IdentityFile ~/.ssh/id_ecdsa
# 踏み台設定.後ろ2つは,host_Bから見たhost_AのIPアドレスorFQDN,SSHのポート番号.
ProxyCommand ssh host_B nc -w 10 192.168.0.10 22
# ポートフォワード.host_Aの5900ポートをhost_Cの5901として使用できるようにしている.
LocalForward 5901 192.168.0.10:5900
Host host_B
# host_B内のユーザ名を指定
User huga
# host_C内にある,host_Bとの認証に使用する秘密鍵を指定
IdentityFile ~/.ssh/id_ecdsa
# host_BのIPアドレスorFQDNを指定
HostName 203.0.113.14
# sshのポート番号
Port 22
# ここまで
host_Cの ~/.ssh/id_ecdsa.pub の中身をhost_A・host_Bの ~/.ssh/authorized_keys に追記した上で,PowerShellやコマンドプロンプトなどで ssh host_B や ssh host_A が通ることを確認しておく.
VNC設定
RealVNCより,VNC Viewerをダウンロード,インストールする.
ここで,PowerShellやコマンドプロンプトなどで ssh host_A を実行したままにしておく.
インストールが完了したら,VNC Viewerでは127.0.0.1:5901に接続できるか確認.
動作確認 & おまけ
ここまでで,
ようになっている.
しかし,都度この手順を踏むのも面倒なので自動化してみる.
VNC Viewerを立ち上げ,[File]→[Export connections...]から,適当なディレクトリに接続設定をエクスポート.
VSCodeなどで新規ファイルを作成し,
@rem ここから
start ssh host_A -N
start C:\Users\piyo\127.0.0.1-5901.vnc
@rem ここまで
をauto.batなどのファイル名でデスクトップなどに保存.
以降,auto.batをクリックすると自動でSSH・VNCコネクションが確立する.