MobaXtermを使ってWindowsでX11転送(初心者向け)

- #  1-1 MobaXtermについて
SSHを知っている前提で話していこうと思います。
このMobaXtermって言うのは簡単に言えばsshにリモート接続するためのソフトです。このリモート接続でなにができるのかというと、Linuxターミナルへのアクセス、X11アプリケーションのGUIをWindowsに転送することができます。ほかにも私は便利なSecureなFTPファイル転送も使ってます。かなり便利ですよ。Linuxの方でLAN内で使うFTPサーバーとかのターミナル、他にはMinecraftサーバーとかのターミナルをWindowsの方に持ってきてます。なんちゃって負荷分散的なこともできますしね笑

- #### 実行環境
- Windows 10 Pro
- Ubuntu 22.04.4 LTS

- ### 1-2 Windows側でのセットアップ
まず[このサイト](https://mobaxterm.mobatek.net/download.html)にアクセスしてください。
そうすると、こんな画面が出てくると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742490/f064c295-f626-cced-413a-ad75e8cb9a4e.png)
Freeの方のDownload Nowをクリックして別のサイトに飛んでください。
その次に、Portable editionかInstaller editionか聞かれると思うので好きなほう選んでダウンロードしてください。あとはインストーラーで言われたとおりに進めていってください。

- ### 1-3 秘密鍵および公開鍵を生成する
インストールしたMobaXtermを起動してください。ツールバーのところのToolsにMobaKeyGenっていうのがあると思うのでクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742490/caa462ff-3cf1-4003-e928-b087c6123643.png)

すると次はこんなのが出てくると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742490/fbbcf94c-bd24-d5dc-f4af-c7976b18aee2.png)
RSAでもDSAでも何でも良いので選択したらGenerateを押します。(RSAの方が一応セキュリティ的にはいいかも)
勝手に生成してくれるのでそしたら上みたいに文字の羅列が出てくると思うので青くなった部分をtxtなどで保存しておきます。

:::note warn
注意！
Save public keyの公開鍵を使うとssh用の鍵ではないので使用できません！
:::
そのあと、Save private keyをクリックします。多分保存先を聞かれると思うので適当に保存しといてください。名前はなんでもいいですが、拡張子をppkにしておいてください！

- ### 1-4 MobaXtermでのセッションの作成
- 事前にLinux側のIPアドレスを調べておく
- 以下の画像のSessionをクリック
- そうするとAdvanced SSH Settingsというのが出てくると思うのでクリック
- さっき保存した秘密鍵(ppkファイル)の保存先をUse private keyをクリックし、選択する
- Specify UsernameっていうのはLinux側で使用したいユーザーネームを入力しておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742490/ba24db2b-2b17-72fc-228c-6932aad97c88.png)


- ### 2-1 Linux側でのセットアップ
先ほど保存した秘密鍵をLinux側に保存しておいてください。次に、ターミナルを起動して、以下のコマンドを実行します。
```ruby:bash
sudo apt install openssh-server
```
これでopensshのサーバーがダウンロードできます。

- ### 2-2 公開鍵の登録
まずはSSHのフォルダ作成からです。
```ruby:bash
mkdir ~/.ssh
```

これでsshのフォルダは作成出来ました。
次に、公開鍵の登録を行います。普通はviとかvimを使いますが私はあのエディター使いずらすぎるので今回はnanoエディターを使ってます。ご了承ください。

```ruby:bash
sudo nano ~/.ssh/authorized-keys
```
これを実行して、保存しておいた公開鍵をそのままテキスト全てを貼り付けます。その次にCtrl+O、その次にEnter、Ctrl+Xで終了します。
これが終わったらConfigの設定を行いましょう。


これが終わったらこのコマンドを実行します。
```ruby:bash
systemctrl reload sshd
```
このコマンドを実行することによって、opensshのサーバーを再読み込み、というか再起動できます。

- ### 2-3 ユーザーのパスワードの設定
これは特にRootユーザーでログインする方が重要です。Rootユーザーのパスワードは、最初から設定されていません。だから、パスワードが設定されていません。では、設定しましょう。
```ruby:bash
sudo passwd root
```
これを実行すると新しいパスワードを要求されるので設定したいパスワードを入力します。リタイプもしてください。そうすることでパスワードの設定が完了しました。

- ### 3-1 動作確認
試しにRootユーザーで起動してみましょう。
Specify Usernameにrootと入力します。Executeします。パスワードを入力
ログイン成功しました。けどまだ忘れていはいけません。Displayの設定をしなければX11転送を使用することができません。では、やりましょう。
```ruby:bash
export DISPLAY=[Windows側のipアドレス]:0.0
```
これで完了です。Firefoxを起動してみます。
```ruby:bash
Firefox
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742490/71c16cfd-cc2f-4240-951d-0a7712bae556.png)
### 成功です！！！
てな訳でできましたね。
でも、まだほかにも注意してほしいことがあります。
**rootユーザーでない場合**にソフトを起動する場合です。一般ユーザーのことですね。これからFirefoxを実行してみるとエラーを吐きます。
```ruby:log
$ firefox
Error: cannot open display: 192.168.1.20:0.0
```
こういうときはsudo権限をつけましょう。
```ruby:bash
sudo firefox
```
これでいけました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742490/ca8e72fa-216d-df3e-b9aa-802d0fb69c3c.png)
ですが**Permission Denied**まみれ。
調べてみましたがなんかよくわかりませんでした。あまり小難しいことを言いたくはありませんが調べちゃったので言いたいと思います。sudo/suで使われるFirefoxのデスクトップ設定は同一も、sudoはsuユーザーになりすましているだけであって実際に保存されている設定ファイルにはアクセスできず、sudoで実行されたfirefoxは一時的な設定ファイルが使用されるようです。よって、もしかすると今まで作業していたデータがログアウトすることによって消えるかもしれません。いやまあ調べてみましたがデータが消えることはありませんでした。けど、どんな不具合が出ても<font color="red">**自己責任**</font>で！！！


ということで終わりたいと思います！ご視聴ありがとうございました！