LoginSignup
17
14

More than 3 years have passed since last update.

windows標準ssh(openssh)だけを用いてLinuxサーバから画面をX転送する。

Last updated at Posted at 2020-09-02

はじめに

linux, macやWSL上であればsshのオプションに-Xを付ければ終了ですが、生のwindows上ではそれができません。
また、windowsであってもsshクライアントにTera TermとかPuTTyとかを使えばすぐに設定できることですが、これらの設定法は調べればすぐに出ますので、検索してほしいと思います。
私の考えとしてはwindowsにはせっかく初めからssh接続できるソフトが入っているので、インストールしなくていいソフトはなるべくインストールせず、必要最小限のソフトでsshの設定を行いたいと思ったのがきっかけでこの記事を書きました。

環境

OS
windows10 Pro
ssh接続先OS
Linux(Ubuntu18.04LTS)
sshクライアント
OpenSSH
必須ソフトウェア
コマンドプロンプト
Windows PowerShell
Xwindow system ソフト(VcXsrv)

セットアップ

OpenSSH, コマンドプロンプト, Windows PowerShell

windows10であればデフォルトでインストールされているはずです。その為、セットアップの仕方はわかりませんので、省略します。すいません。

Xwindow system

X転送されたものを表示するためのソフトウェアには様々な種類がありますが、私はVcXsrvというソフトウェアを用いました。
以下のURLからダウンロードして、インストールできます。
VcXsrvのダウンロードページ
より詳しい方法を知りたい場合は以下のURLが参考になります。
WSL上にXサーバをインストールしてGUIを実現する(VcXsrv編)

前提

コマンドラインの先頭文字の表記の意味

C:\>
コマンドプロンプト上でのコマンド入力
PS C:\>
windows powershell上でのコマンド入力
$
linux環境のターミナルでのコマンド入力

文字の意味

<windows_username>
windows上でのユーザ名
<server_usrename>
サーバ上でのユーザ名

ssh接続について

目的の接続先にssh接続できる状態であることを前提とします。
この記事で解説することは多段sshができる必要はありませんが、私の試した環境は多段ssh接続するものであるため、それを前提に解説します。
これから解説する設定前の段階で、以下のようにして踏み台サーバ(PC), 目的のサーバ(PC)にアクセスできるものとします。

  • 踏み台サーバ(PC)
C:\> ssh <server_username>@hoge.jp
  • 目的のサーバ(PC)
C:\> ssh <server_username>@hoge.jp
$ ssh hoge1

X転送するための設定(本題)

  1. まずwindows上のファイルC:\Users\<windows_username>\.ssh\configを以下のように作成または修正します。
    これにより、以下の3点が設定されます。

    • windows上からssh接続するときの指定先が簡略化できる。(<server_username>@hoge.jp -> server)
    • windows上から直接hoge1にアクセスすることができる。
    • X11 forwarding機能を有効にする。
    config
        Host server
          User <server_username>
          HostName hoge.jp
          ForwardAgent yes
          ForwardX11 yes
          ForwardX11Trusted yes
          ForwardX11Timeout 596h
    
        Host server1
          HostName hoge1
          User <server_username>
          ProxyCommand ssh.exe server -W %h:%p
          ForwardAgent yes
          ForwardX11 yes
          ForwardX11Trusted yes
          ForwardX11Timeout 596h
          ServerAliveInterval 300
          ServerAliveCountMax 5
    
  2. 次に環境変数DISPLAYを設定します。

    1. windows powershellを起動して、以下のコマンドを実行します。

      PS C:\> [System.Environment]::SetEnvironmentVariable("DISPLAY", "localhost:0.0", "User")
      
    2. windows powershellを再起動して、設定されているか確認します。

      PS C:\> $env:DISPLAY
      localhost:0.0
      
  3. windows上でX window system(VcXsrv)を起動

  4. 最後に以下のようにサーバに接続して、何か画面を表示するプログラムを起動して、画面が表示されれば成功です。

C:\> ssh server1
$ <何か画面を呼び出すプログラムの実行コマンド>

デモ

hoge1上に以下のただのグラフを表示するコードが存在するとします。

グラフ表示コード(test.py)
test.py
import matplotlib.pyplot as plt

x = [100, 200, 300, 400, 500, 600]
y = [10, 20, 30, 50, 80, 130]

plt.plot(x, y)
plt.show()

この時、x window system(VcXsrv)を起動し、以下のコマンドを実行した時、windows上に以下の画像が表示されます。

C:\> ssh server1
$ python test.py

image.png

終わりに

今回参考にしたのは以下のものです。
もしかすると以下のURLのほうが参考になるかもしれません。
参考URL:
Windows 10 OpenSSH
VSCode Remote Development + SSHトンネルで安全なWebアプリケーション開発
WSL上にXサーバをインストールしてGUIを実現する(VcXsrv編)

追記

2020/9/3時点
configファイルを編集する方法しかwindowsからX転送はできないと思っていた
2020/9/15時点
改めて実験してみたところ、DISPLAYの設定がされていれば、LinuxやMacと同様にして、-Xオプションを付けるだけで接続できることが判明。

その為、この記事はX転送するときの選択肢の一つとしてみていただければ幸いです。

編集履歴

2020/9/15
・追記の追加
2020/11/4
・編集履歴の追加
・追記の編集
・ssh.exeを絶対パスで指定すると書いたが、ssh.exeで十分機能することが判明したため、configファイルの訂正
-Xオプションが機能することが分かったため、前置き文の取り消し線を追加(9/15の時には訂正し忘れていました。。)
17
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
14