MobaXtermがVSコードではなくDISPLAY変数を設定する理由と方法は何ですか?

MobaXtermがVSコードではなくDISPLAY変数を設定する理由と方法は何ですか?

Linux VMで開発するためにリモートプラグインでVS Codeを使用するように切り替えたいと思います。しかし、DISPLAY変数に関連する問題で問題が発生しています。とにかく、MobaXtermを使用してサーバーにSSHとして接続している間、DISPLAY変数は正しく設定されます。ただし、VSコードを使用して同じサーバーにSSHで接続すると、まったく設定されません。 DISPLAY変数を手動で設定できますが、MobaXtermを使用してこれを行うにはどうすればよいですか?この値を示す設定ダイアログには何も表示されないため、Visual Studio Codeを介してSSH接続中にDISPLAYを自動的に設定するためにこのプロセスを複製する方法がわかりません。複数の仮想マシンに接続する場合、DISPLAY変数が異なる場合があります。時には14.0、時には10.0なので、設定ファイルにハードコーディングするのは良い考えではないようです。それでは、どのように設定する必要がありますか?

私のリモート接続SSH設定ファイルは、ターゲットの偽名を設定したことを除いて、次のようになります。

Host server-10
  HostName server-10
  IdentityFile C:\\Users\\my.user.name\\.ssh\\id_rsa
  ForwardX11 yes
  ForwardX11Trusted yes

ベストアンサー1

MobaXtermの主な目的は、X11 GUIアプリケーションを有効にすることであるため、X11ディスプレイサーバーが含まれています。したがって、SSH クライアントコンポーネントはデフォルトで X11 転送を要求します。

一方、VS CodeにはX11サーバーが含まれておらず、-X次の-Yものを除いてX11-XY転送は要求されません。SSH接続コマンドを入力してください。早く。

X11がSSH経由で渡されると、次のようになります。

1.)SSHクライアントは、ローカルX11ディスプレイサーバー(Windowsでは特に指定しない限り、通常はポート6000へのローカルTCP接続を介して)に接続し、アクセス可能であることを確認します。

2.)リモートSSHサーバーとの接続をネゴシエートすると、クライアントはX11転送を要求します。リモートSSHサーバーが要求を受け入れると、ポート6010以降の最初の使用可能なポートでローカル接続をリッスンするようにローカルX11プロキシを設定します。DISPLAYリモート側で環境変数を設定します。通常、ダミーMIT-MAGIC-COOKIEセッションキーを持つファイルもlocalhost:<X11 proxy port number - 6000>提供されます。~/.Xauthority

3.)リモートX11アプリケーションが起動すると、DISPLAY環境変数と~/.Xauthorityファイルが表示され、指示に従ってリモートSSHサーバーによって生成されたプロキシへのX11接続を確立します。

4.)プロキシポートはX11接続(通常は同じホスト内でのみ)を許可し、セッションキーを確認し、暗号化されたSSHトンネル内のX11トラフィックをローカルSSHクライアントに転送します。

5.)ローカルSSHクライアントは、リモートダミーCookie(必要な場合)を実際のローカルX11サーバーに必要なCookieに置き換え、ローカルトラフィックをX11ディスプレイサーバーに転送します。すべての回答は同じ方法で再送信されます。

リモートX11ポート番号とそのDISPLAY変数の値は、リモートサーバー(および6010 +の範囲内のTCPポートの他のユーザー)内の他の既存のSSH転送X11接続の数によって異なります。したがって、DISPLAY変数をハードコーディングすることは本当に良い考えではありません。

Windows用X410 X11サーバーには、VS Codeを使用してX11接続を確立するための図が含まれているマニュアルがあります。https://x410.dev/cookbook/enabling-ssh-x11-forwarding-in-visual-studio-code-for-remote-development/

すべてのWindows X11ディスプレイサーバーを使用できますが、原則は同じです。


ローカルX11ディスプレイサーバーがポート6000 / TCPから直接リモートX11接続を許可する場合、技術的にできるDISPLAYリモート変数を手動で設定します<IP or hostname of the local system>:0。しかし、あなたはこれをしないでください。ローカルシステムに接続できる人を絶対に信頼しない限り、次のように設定されます。暗号化されていないX11接続は簡単に盗聴されます。

悪意のあるリモートX11接続は、次の役割も果たす可能性があります。キーロガー完全なローカルディスプレイでは、したがって、自分のセッションの正当な部分ではないアプリケーションがX11ディスプレイサーバーに接続することを許可しないでください。 X11セッションCookieメカニズムは、リモートアプリケーションがユーザーアカウントにのみ提供されるセッション固有のCookieを生成できない限り、X11接続が切断されるのを防ぐように設計されています。

2000年以降、私が見たほとんどすべてのLinuxディストリビューションは、デフォルトで暗号化されていないリモートX11接続を拒否するようにX11サーバーを構成しましたが、Windows X11サーバーはまだそうしていない可能性があります。

おすすめ記事