Windows からでも「Amazon Linux 2」へSSH 接続できます。
さらにリモート接続して、GUI で操作できます。
「Amazon Linux 2」にGUI で接続する方法。
Contents
結論。AWS のドキュメントに解決策が載っていました。
■ Amazon Linux 2 を実行している Amazon EC2 インスタンスにGUI をインストールする方法を教えてください。
GUI 接続するまでの主な流れ
以下、Windows 環境で実践した内容です。
GUI 接続するまでの主な流れとしては、以下のようになってます。
- EC2 インスタンスを作成する。
- SSH 接続する。
- GUI をインストールする。
- tigervnc (VNC サーバー)をインストールする。
- SSH でポートフォワードする。
- 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 番が、ローカルのポートみたいに認識されます。
そもそもセキュリティグループで許可していないポートを使用できているので、セキュアだと思います。
トンネルみたいですね。
参考:セキュリティグループ の状態。
「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 の件で、下の方にビューワーがあることに気付かず、
サーバーをインストールして一生懸命設定を触っていたことは内緒です。
ピンバック: Windows で SSH 接続する時のまとめ。Windows 10、Windows Server 2016、2019 - .zapping
ピンバック: Windows Server 2019 でSSH ポートフォワーディング(トンネリング)を使ったリモートデスクトップ接続について。 - .zapping
ピンバック: Amazon Linux 2 を、ローカル環境に構築する。【Virtual Box】 – .zapping