LoginSignup
1

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

Last updated at Posted at 2023-04-28

概要

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

目次

  1. Windows Terminalの導入
  2. WSL2(Ubuntu)の導入
  3. WSL2(Ubuntu)でssh接続
  4. 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接続ができるようにした

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環境構築を行い、使うべきプログラムを実行する環境を整えることができた

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1