VPSクラウドのsshログインとpythonのインストールまで

#環境構築するまでの流れ
備忘録として記録します。

##そもそもなんでLinuXか
###①無料で使える
WindowsOSをインストールするのには1台当たり約15,000~20,000円
LinuxはOSインストール費用は無料
###②ソフトも大体無料
###③中身を弄れる
OSの本質を勉強することができる。
もちろん中身を弄って壊れることもある。
その時は無料でOSを再インストールできるのが強み
###④サーバを自由に建てることができる
サーバの多くはLinuxで動いている。
例)AWSもLinux上で動いている
###⑤古いPCでもサクサク動く
Linuxはとても早く動く。
それは不要なものをそぎ落としている軽量OSであるため。

##centOSを選択
###理由①　業界のデファクトスタンダード
デファクトスタンダードはRHEL(RedHatEnterpriseLinux)。
しかし、ライセンス料が決して安くはない。
そのためRHELのクローンであるcentOS(CommunityEnterpriseOperatingSystem)を使う。

###理由②　情報量が豊富
私用しているユーザが多いため、情報が多く存在する。
そのため勉強もしやすい。

##環境構築
###サーバ選定
WebARENAのVPS（Virtual Private Server)クラウドを契約しました。
理由は料金面が主です。

###サーバにssh接続
ssh(Secure Shell)とはネットワークに接続された機器を遠隔操作し、管理するための手段。
VPSはほとんどの場合、遠隔操作が主になる。
そのため、万が一悪意を持ったユーザがサーバにログインできてしまうと悪用される。
そこでsshを利用して、対象のユーザのみがログインできるようにする。

###①インストール確認
まずはTeraTermを使ってルートユーザでログイン。
(WebARENAのマニュアルを参照)

```
#openssh-serverがインストールされているかの確認
# yum list installed | grep ssh

libssh2.x86_64                     1.4.3-10.el7_2.1               @base/7.4.1708
openssh.x86_64                     7.4p1-11.el7                   @base/7.4.1708
openssh-clients.x86_64             7.4p1-11.el7                   @base/7.4.1708
openssh-server.x86_64              7.4p1-11.el7                   @base/7.4.1708
```
インストールOK。
無かった場合、
　# yum -y install openssh-server
でインストール。

###②設定の確認
```
# vi /etc/ssh/sshd_config

PermitRootLogin yes
⇒noに変更
理由：rootユーザでのログインを拒否するため。(セキュリティ面)
PasswordAuthentication
⇒yesに変更
理由：ユーザからのログインを許可するため

最後に:wqで保存
```

###③サービスの起動
```
# systemctl start sshd.service
# systemctl status sshd.service
Active: active (running)
になっていればOK
```

###④ファイアウォール設定
ssh用のポートが解放されているか確認。

```
# firewall-cmd --list-all
Servicesの欄にsshが入っていればOK
```

###⑤ユーザ作成
rootログインを制限したため、新規ユーザを作成
```
# useradd admin
# passwd admin
```

これでユーザログインできるはず…
しかし、できず。

方法を変えます。
https://hackers-high.com/linux/easy-ssh-publickey-authentication/
を参考にしました。

```
# su admin
#sshキーの生成
$ ssh-keygen -b 2048 -C [任意のコメント]
#どこに生成するか聞かれる
Enter file in which to save the key (/home/admin/.ssh/id_rsa):
⇒そのままEnter
Created directory '/home/admin/.ssh'.
⇒初期設定のディレクトリに生成
Enter passphrase (empty for no passphrase):
⇒独自のパスフレーズを設定
```

####公開鍵の登録

```
cd ~/.ssh
$ cat id_rsa.pub >> authorized_keys
$ chmod 600 authorized_keys
#不要なキーを削除
$ rm -f id_rsa.pub
```

####秘密鍵をクライアント側に持ってくる
```
$ cat id_rsa
#—–BEGIN RSA PRIVATE KEY—– から —–END RSA PRIVATE KEY—– までをコピーして、クライアントで作成したファイル id_rsa にペーストすればOK。
#サーバ側の秘密鍵を削除
$ rm -f id_rsa
#sshdを再起動して設定を反映
$ systemctl restart sshd
```

teratermから
ユーザ名：admin
パスワード：設定したパスフレーズ
秘密鍵；生成したファイル
でユーザログインを確認。

※セキュリティ的に少し疑問が残るため、この方法以外でユーザログイン出来た方は教えていただけると幸いです。

##pythonのインストール
まず現時点でインストールされているpythonのバージョンを確認。

```
$ python --version
Python 2.7.5
```
古いバージョンですね。最新版をインストールしていきます。
その前に作成したユーザにsudoのインストール権限を与えます。

```
#root権限で実行
#wheelというグループに所属していればsudoが使える
# usermod -aG wheel admin
#adminに変更
$ groups
admin wheel
⇒OK!
```

それではpythonをインストールしていきます。

```
#pyenvを使ってpythonのバージョンを切り替える。
#pyenvはpythonバージョン管理ツール
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
#環境変数の設定を行う。
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

#設定が完了したのでpyenvのバージョンをチェック
pyenv --version
pyenv 1.2.21-5-gdb939bb
```

次に任意のディレクトリにpythonをインストールします。
自分は以下のディレクトリとしました。

```
$ mkdir /home/admin/python_install 
/home/admin/python_install
```

```
#インストールできるpythonのバージョンを確認
$ pyenv install --list | grep 3.9
  3.9.0
  3.9-dev
  3.9.1
  miniconda-3.9.1
  miniconda3-3.9.1

#最新の3.9.1をインストール
$ pyenv install 3.9.1

#失敗しました。以下エラー。
Downloading Python-3.9.1.tar.xz...
-> https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz
Installing Python-3.9.1...

BUILD FAILED (CentOS Linux 7 using python-build 1.2.21-5-gdb939bb)

Inspect or clean up the working tree at /tmp/python-build.20201212114831.8867
Results logged to /tmp/python-build.20201212114831.8867.log

Last 10 log lines:
checking for python... python
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
checking MACHDEP... "linux"
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/tmp/python-build.20201212114831.8867/Python-3.9.1':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
```
pythonをインストールためのパッケージがなかったようです。

```
#必要なパッケージのインストール
$ sudo yum -y install xz bzip2 sqlite-devel gcc openssl-devel readline-devel zlib-devel
$ sudo yum -y install libffi-devel
```

再度pythonをインストール

```
$ pyenv install 3.9.1
```
無事インストール完了。

```
$ python -V
Python 2.7.5
```

まだ、pythonのバージョンは切り替わってないのでここを変更します。

```
$ pyenv rehash
#globalを使うとシステム全体に変更を適用できる
#一部のみの場合はlocalを使用
$ pyenv global 3.9.1
$ python -V
Python 3.9.1
```

無事、pythonのバージョンを変更できました。

####pythonの動作確認
```
$ python
>>>print("Hello World")
Hello World
```
OKですね。