WindowsからVPSで遊ぶためのメモ

VPSで遊ぶためのメモ


# はじめに
VPSで遊ぶためにプロバイダに迷惑をかけないための最低限のセキュリティ対策とその他の設定をする

# 環境
クライアントOS: Windows 10
サーバOS: Ubuntu20.04
ツール: Tera Term　と Powershell

# Powershell

## 配色を変更

ColorToolを使ってPowershellの配色を変更する

本体はここから
https://github.com/microsoft/terminal/releases/tag/1904.29002

スキームはここから
https://github.com/microsoft/terminal/tree/main/src/tools/ColorTool

```terminal:ターミナル
# themeを確認
$ ./colortool.exe -s

campbell-legacy.ini                                                              
campbell.ini                                                                    
cmd-legacy.ini                                                                  
deuteranopia.itermcolors                                                         
OneHalfDark.itermcolors                                                        
OneHalfLight.itermcolors                                                        
solarized_dark.itermcolors                                                      
solarized_light.itermcolors                                                      
tango_dark.itermcolors                                                           
tango_light.itermcolors

# themeを適用
$ ./colortool.exe theme名
```


# セキュリティ対策

## root

### パスワードを設定しておく　

何もしていないとパスワードが設定されていないので、作業ユーザでログインしてシェルなどrootになってからでないとできない変更をしようとしたときにパスが設定してなくてrootになれなくて詰むことになるので

- rootでログインする

```:root
sudo passwd root
```

##　ユーザ

### 作業ユーザ作成

```
adduser username
```

### 管理権限を付与

sudoコマンドを使用できるようにする

```
usermod -aG sudo username
```

## 公開鍵作成 

### TeraTerm版

#### クライアント

- Homeディレクトリに.sshフォルダを作成
- 作成した.sshフォルダ内にTeraTermで公開鍵認証の鍵ペアを生成


#### サーバ

- 作業ユーザでサーバへパスワードログインしておく
- 公開鍵(.pub)をサーバの作業ユーザのhomeディレクトリへ設置(ドラッグ&ドロップ)する
- .sshフォルダを作成して、ここに公開鍵を移動する
- exitして、再びTeraTermから秘密鍵を選択してSSHログインできるか確認



### Powershell版

#### クライアント

- 認証方式はrsaで鍵のビット数を4096に指定
- コメントとフレーズとファイルは指定しない(-Cと-Nと-f)
- 保存先と名前はデフォルトでhome/.ssh/id_rsaになる
- 名前を変えたければ入力する、そのままでいいならEnter

```terminal:ターミナル
mkdir ホームディレクトリ\.ssh
cd ホームディレクトリ\.ssh
ssh-keygen.exe -q -t rsa -b 4096 -C '""' -N '""' -f id_rsa
```

鍵の生成はPowershellがいいね


#### サーバ

- ssh -i 秘密鍵のパス ユーザ@ホスト名で接続
- 毎度入力するのは面倒なのでエイリアスを設定
- notepad $profile で編集する


```:$profile
# VPSその１
function vps1 {  
	ssh -i 秘密鍵のパス ユーザ名@ホストのIPアドレス
}
```

- エイリアスが実行できない(スクリプトの実行が無効の場合)
    - 管理者権限で`Set-ExecutionPolicy RemoteSigned`　を実行する

```:ターミナル
Set-ExecutionPolicy RemoteSigned
> Y
```
```
# 実行ポリシーを確認
Get-ExecutionPolicy
```

鍵認証接続もPowershellのほうがいいね


## ポートの変更

デフォルトのままだと危険らしいので

```:/etc/ssh/sshd_config
Port 2222
``` 

## rootユーザのログイン禁止

```:/etc/ssh/sshd_config
PermitRootLogin no
```

## パスワード認証を禁止

```:/etc/ssh/sshd_config
PasswordAuthentication no
```

## RSA認証を許可

```:/etc/ssh/sshd_config
RSAAuthentication yes
```

## 公開鍵認証を許可

```:/etc/ssh/sshd_config
PubkeyAuthentication yes
```

## PAM認証を禁止

```:/etc/ssh/sshd_config
UsePAM no
```

## ここで一旦sshサービスを再起動

rootログインできないことを確認してみる

```
sudo service ssh restart
```

# システムを日本語化

## 日本語パックインストール

```terminal:ターミナル
sudo apt-get install language-pack-ja
```

## 日本語化を適用

```terminal:ターミナル
sudo update-locale LANG=ja_JP.UTF-8
```

```terminal:ターミナル
strings /etc/default/locale
```

# zsh

```
sudo apt install zsh
chsh -s /bin/zsh
```

- ターミナルを再起動する
- Zshが誕生したらEnter
- Zshのフレームワークである`prezto`をいれる
- 

https://github.com/sorin-ionescu/prezto

```
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
```

```:もろもろの初期化処理
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
```

- この時点でかなりおしゃれなターミナルになる
    - ならなければどこかおかしい
- 最後にモジュールの設定をして、補完やハイライトされるようにする

```~/.zpreztrc
zstyle ':prezto:load' pmodule \
  'environment' \
  'terminal' \
  'editor' \
  'history' \
  'directory' \
  'spectrum' \
  'utility' \
  'completion' \
  'syntax-highlighting' \
  'autosuggestions' \
  'prompt' \
```

# Dotfiles

- シェルが入ったらdotfiles等をscpかgitクローンで持ってくる
- git cloneは自分のレポジトリからやればいいので省略
- scpは以下の通り

```
あとで書く
```

# ストレージ

## aptコマンドで不要なゴミを削除

```
sudo apt-get autoremove
sudo apt-get autoclean
``` 

## duよりみやすいncduで容量を確認する

標準のduコマンドより見やすい

```
sudo apt install ncdu
```
```:~/.zshrc
alias size=ncdu
```


# コマンドパッケージ

## Rustのコマンドツールを入れる

- exa : ls
- bat : cat
- fd : find
- procs : ps
- ripgrep : grep

- 上記をエイリアスに設定しておく

```:Cコンパイラ等のビルドパッケージ群をインストール（必須）
sudo apt install build-essential
```

```:つぎにRustインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

```:パス追加
export RUST="$HOME/.cargo/bin"
export PATH=$PATH:$RUST
```

```:バージョン確認
cargo -V
```

```:パッケージをまとめてインストール
cargo install exa bat fd-find procs ripgrep

# ここでエラーになったらbuild-essetialが入ってないってこと
```
```~/.zshrc
alias ls='exa'
alias cat='cat'
alias find='fd'
alias ps='procs'
alias grep='ripgrep'
```

# ターミナルツール

## tmux

基本的な使い方はここを参考にする

https://kanjuku-tomato.blogspot.com/2014/02/tmux.html

- 

# Python

## pyenv

- いろんなpythonで遊びたいから切り替えが楽だといいね

https://github.com/pyenv/pyenv

### ビルドツールをインストール

- pythonをビルドするためのツールをいれる

```
sudo apt install -y \
build-essential \
libffi-dev \
libssl-dev \
zlib1g-dev \
liblzma-dev \
libbz2-dev \
libreadline-dev \
libsqlite3-dev \
```

### pyenvインストール
```
 git clone https://github.com/pyenv/pyenv.git ~/.pyenv
```
```terminal:ターミナル
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.zshrc
```
### pythonインストール

```terminal
# インストールできるやつ一覧
pyenv instlal -l
# インストール
pyenv install 3.9.4
```
### python切り替え

```
# いまのpythonのバージョン
pyenv versions
# 全体のバージョンをきめる
pyenv global バージョン
# ローカルのバージョンをきめる
pyenv local バージョン
```

### pip

- まずpipを最新にする
- パッケージは`pip install -r requirements.txt`で一括でインストール

```
# 最新にする
pip install -U pip
# バッケージ一括インストール
pip install -r requirements.txt
```

```text:requiremets.txt
pandas
numpy
scipy
websocket
websocket-client
```