2024年12月22日日曜日

Raspberry Piにssh経由でVNC接続


背景

Raspberry Pi OSに標準で入っているwayvncの認証が難解だったので、認証と通信の暗号化をsshに任せてVNC接続しました。
当初は遠隔デスクトップ操作にVNCではなくRDPを使う予定でしたが、現時点で最新のOSではRDOサーバーであるxrdpの接続時のエラーを除去できなかったので、Raspberry Pi OSに最初からインストールされているVNCを利用しました。
備忘録として設定方法を記事に残します。

使ったもの

  • Raspberry Pi 3B + 起動に必要な周辺機器(電源、SDカード)
  • Raspberry Pi OS 32bit desktop full 2024.11公開版
  • Raspberry PiにVNCで接続するPC
    OSがubuntu22.04のPCを使いました。
  • remmina
    リモートデスクトップ接続用のプログラムです。
    下記コマンドでインストールしました。
    sudo apt install remmina

raspi-configでVNCを有効化

下記コマンドで有効化できます。
sudo raspi-config nonint do_vnc 0

VNCを有効化すると2024.11版のRaspberry Pi OSではwayvncが有効になります。
下記のコマンドで状態を確認できます。
systemctl status wayvnc.service

今回動作確認したwayvncのバージョン情報はこちらです。
wayvnc --version 
wayvnc: 0.9-dev
neatvnc: 0.9-dev
aml: 0.3.0

動作確認のため安全でない方法で一旦繋ぐ

remminaからRaspberry PiにVNC接続を試みると、初期設定では下記の画面が表示されます。


Enter certificate authentication filesとあるので、認証系のファイルを渡したら良いのだとは思いますが、対象ファイルが多いのでこの認証方法は使わないことにしました。
標準の認証方法でログインする方法を把握されていたら、コメントなどで教えていただけると嬉しいです。

remminaのリポジトリにもissueとして報告されています。
VNC from Ubuntu to Raspberry Pi OS by wayvnc: certificate not recognized

ということで、wayvncの設定を変更して認証無しで一旦VNC接続してみます。

設定ファイルのauthとpamの設定をfalseにすると認証無しで接続可能な危険な状態になります。
/etc/wayvnc/config
enable_auth=false
enable_pam=false
# enable_auth=true
# enable_pam=true

wayvncを再起動すると設定が反映されます。
sudo systemctl restart wayvnc.service

再起動が成功しているか確認します。
systemctl status wayvnc.service

Raspberry Piに繋ぐPCからremminaでVNC接続します。


remminaの設定内容はこちらです。
  • プロトコル: VNC
  • サーバー: Raspberry Pi OSに設定したホスト名.local
    ホスト名を変えてない場合は「raspberrypi.local」で繋げます。
    IPアドレスでも良いです。
認証しない危険な状態なので、ホスト名かIPアドレスを知っていればVNC接続できます。
この状態は一時的にしてください。
上記の設定で繋がりました。


ssh経由でVNC接続

remminaにsshトンネル機能があるので、それを使ってRaspberry Piにsshでログイン後にVNC接続します。
remminaのissueで提案されていた方法です。

Raspberry Pi側はログインした人のみがVNC接続可能なように、addressをlocalhostか127.0.0.1にします。
先程設定したauthやpamの設定は引き続きfalseにします。
/etc/wayvnc/config
address=localhost
# address=::

enable_auth=false
enable_pam=false
# enable_auth=true
# enable_pam=true
これにより、ホスト名やIPアドレスを知っていても、ログインしていなければVNC接続できなくなります。

remminaからssh経由で接続します。


基本設定のタブのサーバーをlocalhostにします。


sshトンネルのタブを開いて下記の設定を行います。
  • 「SSHトンネルを有効にする」を押して有効化
  • 接続先を「カスタム」にしてRaspberry Piの「ホスト名.local」かIPアドレスを記載
  • 必要な認証情報を入力
    今回は接続元のsshキーをRaspberry Piのauthorized_keysに登録済みなので、公開鍵方式にしました。
  • ssh接続するRaspberry Piのユーザー名を記載


パスワード認証方式を使う方は、認証方式を「パスワード」にしてパスワードを記載してください。

上記の設定でssh経由のVNC接続ができました。


おわり

2024年11月版のRaspberry Pi OSに標準で入っているVNCプログラムwayvncを有効化し、それの標準の認証方式は無効化しつつlocalhostでの接続のみを許可し、sshトンネルを経由してVNC接続できました。

RDPの設定を試みたもののxrdpが動かず、標準でインストールされているwayvncの扱いに戸惑いましたが、remminaのsshトンネルを利用する安全なVNC接続方法を把握できて良かったです。

参考

ラズパイbookwormのwayvncと接続する(RealVNC)
VNC from Ubuntu to Raspberry Pi OS by wayvnc: certificate not recognized

0 件のコメント :