メニュー 閉じる

[AWS] 「Amazon Linux 2」に、Windows 10 からGUI で接続する。

Windows からでも「Amazon Linux 2」へSSH 接続できます。

さらにリモート接続して、GUI で操作できます。

「Amazon Linux 2」にGUI で接続する方法。

結論。AWS のドキュメントに解決策が載っていました。

■ Amazon Linux 2 を実行している Amazon EC2 インスタンスにGUI をインストールする方法を教えてください。

GUI 接続するまでの主な流れ

以下、Windows 環境で実践した内容です。
GUI 接続するまでの主な流れとしては、以下のようになってます。

  1. EC2 インスタンスを作成する。
  2. SSH 接続する。
  3. GUI をインストールする。
  4. tigervnc (VNC サーバー)をインストールする。
  5. SSH でポートフォワードする。
  6. VNC ビューワで接続する

EC2 インスタンスを作成する。

EC2 インスタンスを作成します。

せっかく、AWS でLinux するので、「Amazon Linux 2」を選択します。

ちなみに、t3a.medium のスポットインスタンスにしました。($0.0113/1H :2021/06/03)

インスタンスを起動したら、「接続」をクリックします。

EC2 インスタンスへ接続。

「接続」をクリックすると 接続方法がいくつか選べる感じですが、
最初はSSH 接続するしかない感じです。

SSH って、何?

グーグルによると、
細かい事は抜きにして、セキュアにコマンドプロンプトにリモート接続する事。
接続には「SSH クライアント」が必要です。

グ―グルによると、最近はWindows でも、「OpenSSH」というSSH クライアントが組み込まれているとの事。

「OpenSSH クライアント」を確認。

Windows ロゴマーク > 設定 >アプリ >アプリと機能 >オプション機能の管理( 機能の追加)

オプション機能の一覧になくても、 機能の追加 ボタンから追加できます。

Windows Server 2016 などで追加できなかった場合は、下記の方法を試してみてください。

Windows Server 2016 でSSH 接続する方法。(クライアント編)

SSH 接続する。

PowerShell か、コマンドプロンプトのどちらかを起動します。※お好みで。


「SSH」 と入力してエンターした時に、SSH の構文が出てくる状態ならOpenSSH がインストールされています。

さて、「インスタンスに接続」をよく見ると、画面の下の方にコマンドらしきものがあります。

これがEC2 インスタンスへSSH 接続する時のコマンドです。(黄色マーカーの部分)

キーペアのファイルを「鍵」にして「ec2-user」で@マーク以降のURL のインスタンスに接続するという意味になります。

SSH 接続する前に

SSH で使用するポートはデフォルトでセキュリティグループに設定されていて、
アクセス許可されているので特に何かする必要はありません。
が、インスタンスの起動時に、アクセス元を制限する様に促されていると思いますので、
今一度、アクセス可能なソースの確認をしておきましょう。

インスタンスの詳細画面の下、セキュリティタブのセキュリティグループのところで確認・編集ができます。

セキュリティグループはファイヤーウォールの外にある、ファイヤーウォールみたいなものです^^。

ここでアクセス元の制限が確認できる。

それでは早速、SSH 接続コマンドをPowerShell に入力してエンターキーを押します。

PowerShell の実行フォルダ内にキーペアファイルがある場合は、そのまま使えますね。

ssh -i "com_beccou_zapping.pem" ec2-user@ec2-3-12-198-219.us-east-2.compute.amazonaws.com

「com_beccou_zapping.pem」はキーペアのファイル名。
「ec2-user」はログインするユーザー名で、デフォルトのユーザー。
@マーク以降は、接続するインスタンスのURL です。

実行フォルダ内にキーペアファイルがない場合は、
“com_beccou_zapping.pem” をフルパス指定に変更します。

ssh -i "C:\Users\unimoni\Documents\com_beccou_zapping.pem" ec2-user@ec2-3-12-198-219.us-east-2.compute.amazonaws.com

SSH 接続開始。

初回アクセスの時は(グローバルアドレスが変わるたびに)、「フィンガープリント」を設定する旨のメッセージが出ますので、「yes」と回答します。

接続できました。

アスキーアートの「EC2」が眩しい。

Windows でSSH 接続できた事もうれしい。
Linux しかできないと思ってました。

GUI をインストールする。

Linux でGUI を使うにはまず、GUI をインストールする必要があります。

MATE(デスクトップGUI 環境)をインストール。

ここからは、AWS ドキュメントのコマンドをコピペしていくだけです。
しかもAmazon Linux 2 用なので何も考える必要なし。

sudo amazon-linux-extras install mate-desktop1.x

********************************
途中でインストールしてもいいかと聞いてくるので、「y」と入力してエンターします。
********************************
Total download size: 95 M
 Installed size: 443 M
 Is this ok [y/d/N]: y     ※←「y」と入力してエンター。

「y」を入手してエンターすると、インストールログが流れます。
ハッカーになった気分です。シェルの醍醐味でもあります。

画面が止まって、プロンプトが返って来たら、インストール終了です。

以下コマンドを入力して、すべてのユーザーにMATE を定義します。(との事です。)

sudo bash -c 'echo PREFERRED=/usr/bin/mate-session > /etc/sysconfig/desktop'

ちなみにこのコマンドは、「/etc/sysconfig/」にdesktop ファイルを作成していました。

********************************
コマンドの実行
********************************
[ec2-user@ip-172-31-29-220 ~]$ sudo bash -c 'echo PREFERRED=/usr/bin/mate-session > /etc/sysconfig/desktop'
 esktop'sh -c 'echo PREFERRED=/usr/bin/mate-session > /etc/sysconfig/d
[ec2-user@ip-172-31-29-220 ~]$


********************************
作成したファイルの中身を確認
********************************
[ec2-user@ip-172-31-29-220 ~]$
[ec2-user@ip-172-31-29-220 ~]$ cat /etc/sysconfig/desktop
 PREFERRED=/usr/bin/mate-session
[ec2-user@ip-172-31-29-220 ~]$

tigervnc をインストールする。

VNC のサーバーをインストール

EC2 は離れた場所にあるVM なので、基本的にリモートコントロールすることになります。
なので、VNC (バーチャル・ネットワーク・コンソール)のような機能が必要です。

名前からして、「リモート接続」感が満載ですね。

以下を実行します。

sudo yum install tigervnc-server

********************************
途中でインストールしてもいいかと聞いてくるので、「y」と入力してエンターします。
********************************
Total download size: 1.6 M
 Installed size: 3.6 M
 Is this ok [y/d/N]: y     ※←「y」と入力してエンター。

プロンプトがかえって来たら、以下を入力して、VNC 接続する時のパスワードを決めます。

vncpasswd

********************************
例:
********************************
[ec2-user@ip-172-31-31-34 ~]$ vncpasswd
 vncpasswd
 Password:    ※← 入力しても表示されない。
 Verify:     ※← よくある、パスワードの確認。同じく入力しても表示されない。
 Would you like to enter a view-only password (y/n)? n   ※← AWS のドキュメントに従って「n」にしました。
 A view-only password is not used
[ec2-user@ip-172-31-31-34 ~]$

ここでやらなくても、後の手順で強制的に実施されます。

新しい systemd ユニットを作成します。

systemd というのは、Windows でいうところの「サービス管理」みたいな感じ?
気になる方はググってください。

sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@.service

********************************
例:
********************************
[ec2-user@ip-172-31-19-47 ~]$ sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@.service
[ec2-user@ip-172-31-19-47 ~]$

cp はコピーのコマンドなので、
コピー作成したファイルの内容を確認してみる。

Quick How to をマニュアル代わりにGoogle 翻訳しておきました。

#クイックハウツー:
#1.このファイルを/etc/systemd/system/vncserver@.serviceにコピーします
#2.「<USER>」を実際のユーザー名に置き換え、
#「/ usr / bin / vncserver_wrapper」にあるラッパースクリプトでvncserverパラメーターを編集します
#3. systemctldaemon-reloadを実行します
#4. systemctl enable vncserver @:<display> .serviceを実行します

#ローカルエリアネットワークが信頼できない場合は、
#このサービスを実行しないでください。
#VNCを安全に使用するには、ローカルホストへの接続を制限してから、
#VNCを表示するマシン(ホストA)から
#VNC出力を表示するマシン(ホストB)にトンネリングする必要があります。

#[user @ hostA〜] $ ssh -v -C -L 590N:localhost:590M hostB

#これにより、hostAのポート590NからhostBのポート590Mへの接続が開きます。
#(実際には、hostBにssh接続してから、(hostB上の)localhostに接続します。
#ポートフォワーディングの詳細については、sshのmanページを参照してください)

#次に、ローカルホストのvncdisplayNにあるhostA上のVNCクライアントをポイントできます。
#sshの助けを借りて、hostBがポート590Mで利用可能にするものを確認することになります

#「-nolistentcp」を使用して、TCPを介したVNCサーバーへのX接続を防止します。

#「-localhost」を使用して、安全なトンネルを介して接続する場合を除いて、
#リモートVNCクライアントが接続しないようにします。
#`manvncviewer ‘のマニュアルページの「-via」オプションを参照してください。<>

下記を実行して、新しいユニットのすべてのユーザーを「ec2-user」に置き換えます。

上記のファイルの「<USER>」の部分を「ec2-user」に置換しています。

sudo sed -i 's/<USER>/ec2-user/' /etc/systemd/system/vncserver@.service 

下記を実行して、systemd マネージャー設定を再ロードします。

再起動みたいなやつです。

sudo systemctl daemon-reload

サービスを有効にします。

これはインストールの後とかによくやるやつです。

sudo systemctl enable vncserver@:1

********************************
例:
********************************
[ec2-user@ip-172-31-19-47 ~]$ sudo systemctl enable vncserver@:1
 Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:1.service to /etc/systemd/system/vncserver@.service.
 [ec2-user@ip-172-31-19-47 ~]$

サービスを起動します。

「:1」は、ディスプレイ番号1 という意味です。
レスポンスは実にあっけないです。

sudo systemctl start vncserver@:1

********************************
例:
********************************
[ec2-user@ip-172-31-19-47 ~]$ sudo systemctl start vncserver@:1
[ec2-user@ip-172-31-19-47 ~]$

ステータスを確認してみます。
ちゃんと起動していますね。

[ec2-user@ip-172-31-19-47 ~]$ sudo systemctl status vncserver@:1
 ● vncserver@:1.service - Remote desktop service (VNC)
    Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: disabled)
    Active: active (running) since Tue 2021-05-11 13:46:08 UTC; 1min 16s ago
   Process: 786 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
  Main PID: 789 (vncserver_wrapp)
    CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service
            ├─789 /bin/sh /usr/bin/vncserver_wrapper ec2-user :1
            └─963 sleep 5
 May 11 13:46:08 ip-172-31-19-47.us-east-2.compute.internal systemd[1]: Starting Remote desktop se…
 May 11 13:46:08 ip-172-31-19-47.us-east-2.compute.internal systemd[1]: Started Remote desktop ser…
 May 11 13:46:08 ip-172-31-19-47.us-east-2.compute.internal vncserver_wrapper[789]: xauth:  file /…
 May 11 13:46:11 ip-172-31-19-47.us-east-2.compute.internal vncserver_wrapper[789]: New 'ip-172-31…
 May 11 13:46:11 ip-172-31-19-47.us-east-2.compute.internal vncserver_wrapper[789]: Creating defau…
 May 11 13:46:11 ip-172-31-19-47.us-east-2.compute.internal vncserver_wrapper[789]: Creating defau…
 May 11 13:46:11 ip-172-31-19-47.us-east-2.compute.internal vncserver_wrapper[789]: Starting appli…
 May 11 13:46:11 ip-172-31-19-47.us-east-2.compute.internal vncserver_wrapper[789]: Log file is /h…
 May 11 13:46:16 ip-172-31-19-47.us-east-2.compute.internal vncserver_wrapper[789]: 'vncserver :1'…
 Hint: Some lines were ellipsized, use -l to show in full.
 [ec2-user@ip-172-31-19-47 ~]$

GUI へリモート接続

SSH でポートフォワードします。

Windows に戻り、PowerShell をもう1つ起動して、下記コマンドを実行します。

ssh -L 5901:localhost:5901 -i PEM_FILE ec2-user@INSTANCE_IP

※先ほどまで使っていたのとは別のPowerShell を使っています。

「PEM_FILE」は秘密鍵ファイルを指定、
「INSTANCE_IP」 はGUI で接続するLinux インスタンスのパブリックアドレスを入れます。

結果として、SSH 接続時のコマンドの「-i」の前に「5901:localhost:5901」を追加したコマンドになります。

ssh -L 5901:localhost:5901 -i "C:\Users\unimoni\Documents\com_beccou_zapping.pem" ec2-user@ec2-3-12-198-219.us-east-2.compute.amazonaws.com

これは、自分の端末の5901 番ポートを、接続先の5901 番ポートにマッピングするコマンド操作です。
いわゆるポートフォワードになるんですかね。

5901 番というのは、vncserver が通信に使うポートを指しています。
5900 番台がデフォルトで使うポート群で、ディスプレイが「1」なら、
「5900 + 1」 で「5901」 のポートをつかう。という具合になります。

成功すると、接続先のLinux インスタンスのポート5901 番が、ローカルのポートみたいに認識されます。
そもそもセキュリティグループで許可していないポートを使用できているので、セキュアだと思います。
トンネルみたいですね。

参考:セキュリティグループ の状態。

画像に alt 属性が指定されていません。ファイル名: image-120-1024x245.png

「VNC ビューワ」でWindows からLinux インスタンスへ接続する。

ドキュメントにあるように、TigerVNC のウェブサイト から「VNC Viewer」を入手します。
Windows にインストール不要で使用できるVNC のビューワーです。

このビューワーを使って、AWS のLinux インスタンスへ接続します。
GUI まであと一息です。

Releases(リリース)をクリック。

下記のリンク先をクリック。

下の方へスクロールして、「vncviewer64-1.11.0.exe」をダウンロードします。

ダウンロードしたexe をダブルクリックすれば、そのままビューワーが起動します。

ダイアログボックスが出てくるので、「localhost:1」と入力して
「Connect」をクリックします。

先ほど、SSH でポートフォワードしているので、ローカルホストとして通信できる。。。カッコよ。

vncpasswd のコマンドを使って決めたパスワードを入力します。

Hellow Amazon Linux 2 !!

まとめ

Linux って主にシェルで作業するイメージで、
さらにAWS でLinux を使おうとすると、「SSH 接続!」「リモートシェルログイン!」とか、
SSH になじみがない、GUI 派の私には敷居がめちゃ高いなあと思っていましたが、
今回Windows でも何不自由なくLinux をGUI でリモートできるというのが分かりました。

TigerVNC の件で、下の方にビューワーがあることに気付かず、
サーバーをインストールして一生懸命設定を触っていたことは内緒です。

Posted in AmazonLinux2, AWS, EC2, Linux

関連投稿

2件のコメント

  1. ピンバック:Windows で SSH 接続する時のまとめ。Windows 10、Windows Server 2016、2019 - .zapping

  2. ピンバック:Windows Server 2019 でSSH ポートフォワーディング(トンネリング)を使ったリモートデスクトップ接続について。 - .zapping

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です