Linuxコマンドとか何も分からんけど、ssh接続先でconda環境構築してみた

# 概要
なんとまあ驚いたことに、研究室先のコンピュータに接続して学習をすべき機会が生まれてしまった
そのため、GUI搭載OSしか利用したことがなかった私がWindows 11でのLinux仮想環境構築からssh接続の利用を行うまでの行動履歴をここに書き連ねる
# 目次
1. Windows Terminalの導入
1. WSL2(Ubuntu)の導入
1. WSL2(Ubuntu)でssh接続
1. ssh接続先でconda(miniconda)環境構築

## Windows Terminal
https://aka.ms/terminal

これはLinux仮想環境構築に必須ではないが、非常に便利であるにも関わらず存在を知らずにコマンドプロンプトを使い続けていたので書いておく

Windows Terminalは、コマンドプロンプトやWindows PowerShell、そしてこれから導入するUbuntuなどのコマンドラインを一つのウィンドウにタブでまとめて管理できる
Windows 11から、これを既定のターミナルとして設定できるので使っておいたほうがいいだろう

さらに便利機能として、ctrlを押しながらタブ追加ボタン[+]を押すと管理者権限を持ったタブを作成することができるので、~~単にタスクバーにピン留めしているWindows Terminalからでも簡単に管理者権限が必要な操作ができる~~
と、さっきまで思っていたが、タスクバーにピン留めされたアプリは、そのアイコンを右クリックして出るメニューのアプリ名の欄を更に右クリックすると詳細なメニューが表示され、そこで管理者として実行できる　知らないことは多いなあ

## WSL2(Ubuntu)
WSLはWindows Subsystem for Linuxの略で、これを使うとWindowsでLinux仮想環境が使える
導入方法は簡単で、Windows PowerShellを管理者として実行し、
```
wsl --install
```
を実行後、PCを再起動するだけですべてのインストールが完了してしまった

UbuntuとはLinuxディストリビューションの一種であり
デフォルトの`wsl --install`ではUbuntuがインストールされるが、以下のコマンドで別のLinuxディストリビューションを指定することも可能
```
wsl --install -d <Distribution Name>
```
Ubuntu初起動時はユーザーネームとパスワードを設定する
```
Enter new UNIX username:
Enter new UNIX password:
```

## ssh接続
ssh接続をするためには、秘密鍵と公開鍵が必要で、それらを作成するには`ssh-keygen`というLinuxコマンドを実行する必要がある
主なオプションに、鍵の暗号化形式を指定する`-t`と公開鍵に付随するコメントを指定する`-C`がある
暗号化形式は、一番強固らしいed25519を指定しておいた
コメント欄には、慣習としてgithubのメールアドレスを書いておくらしいのでそれに私も従った
```
ssh-keygen -t ed25519 -C 'hoge@example.com'
```

すると、鍵のファイル名を入力するように求められるので、デフォルトの`~/.ssh/id_ed25519`で何も書かずにEnter
そして、秘密鍵に設定されるパスフレーズを入力するように求められるので、パスフレーズは空でも良いが念のため入力しておいた
```
Enter file in which to save the key(/home/user/.ssh/id_ed25519):
Enter passphrase(empty for no passphrase):
Enter same passphrase again:
```

こうやって、`id_ed25519`という 秘密鍵ファイル と、`id_ed25519.pub`という 公開鍵ファイル が生成される
ちなみに、やっぱりパスフレーズを変えたいと思ったときは、`ssh-keygen`に、パスワードを変更するためのオプション`-p`とのファイル名を指定するオプション`-f`で変えたい鍵を指定し実行する
そして、もとのパスフレーズを入力後、新しいパスフレーズ(もしくは空)を入力すると変更できる
```
ssh-keygen -p -f ~/.ssh/id_ed25519

Enter old passphrase:
Key has comment 'hoge@example.com'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.
```

ここで、`ls -al ~/.ssh`で権限を見て、`.ssh`(`.`)が`drwx------`、`id_ed25519`が`-rw-------`になっているかを確認し、違っていたら、パーミッション変更コマンド`chmod`を実行する
```
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/id_ed25519
```

秘密鍵`id_ed25519`を大事に隠しておいて、公開鍵`id_ed25519.pub`を接続したいコンピュータの管理者に渡し、登録作業をしてもらうことでssh接続が可能になった
が、二段階ssh接続をする場合はコマンドを打つのが少し面倒なので、`~/.ssh/config`を作成し、簡単にssh接続ができるようにした
```:config
host gw
   HostName xxx.xxx.xxx.xxx
   User user
   IdentityFile ~/.ssh/id_ed25519

host target
   HostName xxx.xxx.xxx.xxx
   User user
   ProxyCommand ssh -W %h:%p gw
   IdentityFile ~/.ssh/id_ed25519
```

これで、gwを中継してtargetに接続したいとき`ssh target`と入力するだけで、`ProxyCommand ssh -W %h:%p gw`のおかげで自動でgwへの接続を実行してくれる

## miniconda環境構築
ssh接続先でcondaを使えるようにしたいが、以前anacondaを使用していたときに競合して困ったことがあったので、必要最小限の環境構築ができるminicondaを導入する
まずはホームディレクトリに作業ディレクトリを作成する
```
mkdir -p miniconda
cd miniconda
```

作業ディレクトリに最新のMiniconda3をインストールするシェルファイルをダウンロードし実行する
```
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
```

そして、bashシェルでcondaを使用するために必要な設定を行うコマンドを実行し`~/.bashrc`を再読込する
```
~/miniconda3/bin/conda init bash
source ~/.bashrc
```

こうして、minicondaを導入できたが、condaで環境構築するとき
```
conda create -n env_name python
conda activate env_name
```
とコマンドを実行するのだが、自分は`conda activate env_name`をよく忘れてしまいbaseの環境を変更してしまう
なので、間違えてbase環境に干渉してしまわないように、configを変更しておく
```
conda config --set auto_activate_base False
```

何かしらの環境をactivateして、以下のコマンドが実行できたら構築成功
```
python -c "print('Hello World')"
```
このようにして、ssh接続先でconda環境構築を行い、使うべきプログラムを実行する環境を整えることができた

# 参考
https://chigusa-web.com/blog/wsl2-win11/

https://qiita.com/whim0321/items/ed76b490daaec152dc69

https://tech-blog.rakus.co.jp/entry/20210727/ssh

https://qiita.com/overflowfl/items/14a2486df85fd7efac85

https://kaworu.jpn.org/security/ssh_ProxyCommand%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E5%A4%9A%E6%AE%B5ssh

https://www.aise.ics.saitama-u.ac.jp/~gotoh/MinicondaOnUbuntu1804.html