概要
なんとまあ驚いたことに、研究室先のコンピュータに接続して学習をすべき機会が生まれてしまった
そのため、GUI搭載OSしか利用したことがなかった私がWindows 11でのLinux仮想環境構築からssh接続の利用を行うまでの行動履歴をここに書き連ねる
目次
- Windows Terminalの導入
- WSL2(Ubuntu)の導入
- WSL2(Ubuntu)でssh接続
- ssh接続先でconda(miniconda)環境構築
Windows 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接続ができるようにした
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環境構築を行い、使うべきプログラムを実行する環境を整えることができた
参考