Urumos Blog

文系独学ITエンジニア

【その4】SSH接続&サーバー側設定【初めてのAWSデプロイ編】

投稿者: urumos

作成日: 2022年5月29日13:18

更新日: 2022年5月29日13:18

カテゴリ: 初めてのAWSデプロイ

タグ:


TeraTermでSSH接続
 Amazon linux2の場合、初期ユーザーはec2-userだが、ubuntuの場合、初期ユーザー名は「ubuntu」。
 パッケージ管理コマンドはAmazonLinux2はyumコマンドだが、Ubuntuはaptコマンド。
 aptは「Advanced Packaging Tool」の略

※実際にログインしてみた結果、/home/ubuntuというディレクトリで始まった。
 ディレクトリを移動して全体の構造も見てみる
  
  /
  ┗bin
  ┗dev
  ┗home
   ┗ubuntu
    ┗.ssh
     ┗authorized_keys
  ┗lib32
  ┗libx32
  ┗media
  ┗opt
  ┗root
  ┗sbin
  ┗srv
  ┗tmp
  ┗var
  ┗boot
  ┗etc
  ┗lib
  ┗lib64
  ┗lost+found
  ┗mnt
  ┗proc
  ┗run
  ┗snap
  ┗sys
  ┗usr

historyコマンドを打った時に日時が出るように設定の変更
 historyコマンドは過去に自分が打ったコマンドを一覧で見れるコマンド。
 下記の変更をすることにより、日時も一緒に出るようになり便利(デフォルトでは日時は表示されない)
 まずはvimで.bashrcファイルを編集する(場所はデフォルトのubuntuユーザーディレクトリで実行)
   vim .bashrc
  viモードが開いたら長文が出るが、下記の部分を修正(コマンドモードとインサートモードの切り替え操作)
   HISTSIZE=100000 (元々は1000)
   HISTFILESIZE=200000 (元々は2000)
   HISTTIMEFORMAT='%y/%m/%d %H:%M:%S ' (この文は元々ないので追加)
  変更の読み込み
   source .bashrc
   ※これを忘れると変更が適用されない。

ユーザーの追加
 デフォルトユーザーであるubuntuで作業するのは推奨されないとのこと。
 【理由】
  ユーザーを作ればそのユーザー用のディレクトリを持つことができる。
  またLinuxを複数名で管理する場合などを想定すると、
  デフォルトユーザーのアクセス権を与えるよりも、別ユーザーアカウントを作成し、
  限られた権限だけ付与する方が安全。

 新規ユーザーの追加
  sudo useradd XXX

 XXXがsudoコマンドを使えるように、sudoグループに追加
  sudo usermod XXX -G sudo
 ※なお、ubuntuではなくCentOSやAmazonLinuxの場合はwheelグループに追加する

 デフォルトユーザー(ubuntu)のホームディレクトリ内のファイル(authorized_keysのみ?)をXXXフォルダに移動する。
  sudo cp -r /home/ubuntu/.ssh /home/XXX
  説明
   コピー元:「/home/ubuntu/.ssh」
   コピー先:「/home/XXX」
   ※コピー先を「/home/XXX/.ssh」にしようと思ったらエラーが出たので、.sshなしで実行した
   するともちろんauthorized_keysはXXX直下にきた。
 権限変更
  sudo chown -R XXX /home/XXX
 これでTera TermからXXXで秘密鍵でSSHログインしようと思ったらできず。
  色々迷った。passwdコマンドでユーザーのパスワードを設定したり、suで切り替えたりもした。
 しかしTera Termで秘密鍵ログインするにはXXXディレクトリ内の.sshフォルダに秘密鍵の設置が必要みたい。
  mkdir .ssh
 秘密鍵ファイルを移動
  mv authorized_keys .ssh
 再度ログイン挑戦。できた!!無事sudoコマンドも使える!

 デフォルトユーザー(ubuntu)の削除(⇒怖いので後でやる)
  sudo userdel -r ubuntu
  ※-rのオプションをつける事で削除ユーザーのディレクトリも削除される。

パッケージの更新(XXXユーザーで操作)
 有効なパッケージ一覧情報の更新
   sudo apt update
   ※この段階ではパッケージのインデックスファイルを更新しているだけで、実際のアップデートではない。
 パッケージのアップデート
  sudo apt -y upgrade
  ※-yオプションyesの意味で、実行前確認(yes/no)を全て自動でyesにする(スキップする)ためオプション
 不要なパッケージの削除
  sudo apt -y autoremove
 ※なお、これら3つを繋げて「sudo apt update && sudo apt -y upgrade && sudo apt -y autoremove」でも良い。

タイムゾーンの変更
  sudo timedatectl set-timezone Asia/Tokyo
 変更後の確認
  date
 日本語ロケールに変更
  sudo localectl set-locale LANG=ja_JP.UTF-8
 変更後の確認
  localectl status

今回必要なパッケージをインストール
 Pythonをダウンロード?
  ※ubuntuには最初からPythonがインストールされており、そのまま利用できるが、
  このPythonはOSが提供する機能に使われているため、
  ユーザーが色々なパッケージを導入することでOSの安定性を損ねる可能性がある。
  よって別途新しいPythonをインストールするのが一般的とのこと。
  
  以下、【Python Japan(公式?)】からコピペ
   https://www.python.jp/install/ubuntu/index.html
   次のコマンドで、必要なツール類をダウンロードします。
    $ sudo apt update
    $ sudo apt install build-essential libbz2-dev libdb-dev \
     libreadline-dev libffi-dev libgdbm-dev liblzma-dev \
     libncursesw5-dev libsqlite3-dev libssl-dev \
     zlib1g-dev uuid-dev tk-dev
   「非公式Pythonダウンロードリンク」ページから欲しいバージョンをダウンロード
   下記コマンドで解凍
    $ tar xJf Python-3.x.y.tar.xz
   解凍したフォルダに移動
    $ cd Python-3.x.y
   congfigureスクリプトを実行(インストールに必要な環境やライブラリ等が揃っているか確認してMakeFileを生成)
    $ ./configure
   コンパイル(configureスクリプトから生成されたMakeFileを元に実行可能ファイルを生成)
    $ make
   実行可能ファイルを規定のディレクトリにインストール
    $ sudo make altinstall
    ※make install は python3 バイナリを上書きまたはリンクを破壊してしまうかもしれない。
    そのため、make install の代わりに exec_prefix/bin/pythonversion のみインストールする、
    make altinstall が推奨されている。
    Pythonが入っていない環境に対して最初にインストールする際はmake installでも問題無い
   ビルドしたコマンドは /usr/local/bin にインストールされ、
   python3 コマンドまたは python3.x コマンドで起動できます。
  【コピペ終わり】
  
  見たことない手順だ。
  今のWindowsパソコンにPythonを入れた時のことを思い出す
  確か英語のPython公式サイトから最新版のイントローラーをダウンロードしてインストールした。
  バージョンはPython 3.9.150.1013だ。
  その後、「py -m venv 仮想環境名」で仮想環境を作った。
  仮想環境を作ったらScriptフォルダ内にpython3.9.150.1013もきた(コピーされた?)。
  それと同時にPythonだけでなく色々な関連ファイルも仮想環境フォルダ内にインストールされた。
  その後仮想環境をアクティベイトし、pipで色々なパッケージを入れた。
  
  Ubutnuの場合は上記とのことだが、今回調べた多くの記事ではPythonのダウンロードはしていなかった。
  それらの人たちはUbutnuにデフォルトで入っているPythonをそのまま使っているのだろうか?
  OSの機能に影響があるというが、考えてみればパッケージをインストールするのは仮想環境なのだから問題ないのでは?
  しかし今Ubuntuに入っているPythonバージョンは3.8.10だったので、
  日記アプリで使った3.9.150.1013とは違う。
  なので今回は上の手順でやってみよう。
   ※sudo apt updateはもうやったのでスキップ
   下記で必要なツールをインストール(/home/XXXで実行)
    $ sudo apt install build-essential libbz2-dev libdb-dev \
     libreadline-dev libffi-dev libgdbm-dev liblzma-dev \
     libncursesw5-dev libsqlite3-dev libssl-dev \
     zlib1g-dev uuid-dev tk-dev
   実行すると2分くらいで沢山のファイルがインストールされた
   次にPythonをダウンロード。上のサイトではPython非公式サイトからダウンロードと書いてあったが、
   遠隔Linuxではブラウザは使えないので、wgetコマンドでやってたサイトからコピペしてやってみる
    wget https://www.python.org/ftp/python/3.9.150.1013/Python-3.9.150.1013.tar.xz
   すると「そんなものは無い」とエラーが出た。
   バージョン指定がおかしいのかなと思い、3.9.1に変更。
    wget https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz
   したら出来た。
   下記コマンドでファイル解凍
    tar Jxfv Python-3.x.y.tar.xz
    ※最初「Jxfvオプション」なしでやったらエラーになった。意味は不明。
   解凍でき、Python-3.9.1というフォルダができた。そこに移動
    cd Python-3.9.1
   次にconfigureスクリプトを実行
    ./configure
    ※パワーシェルの仮想環境のActivateのように./をつけないとできなかった
   Checking、、というのが長く続き、完了した。
   次にmakeコマンドでコンパイル(configureスクリプトから生成されたMakeFileを元に実行可能ファイルを生成)
    make
   最後にsudo make altinstall
    ※「make install」と「make altinstall」の2種類あるらしいが、複数のPythonを扱う場合は後者とのこと。
   これでPythonのインストールは完了!
   下記コマンドで確認
    python3.9 -V
    結果⇒Python3.9.1
   ちなみにpython3 -Vと打つと、Python3.8.10と出た。
   つまり、Python3コマンドでは元々Ubuntuに入っていたPythonが起動し、
   Python3.9コマンドで自分で入れたPythonが起動するらしい。

 Pythonが無事インストールできたので、次に必要なものをインストール
  sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx
  ※それぞれの意味
   python3-pip
    pipコマンド
   python3-dev
    ??
   libpq-dev
    postgresql開発のためのヘッダーファイル(ライブラリ)
   postgresql
    postgresql本体
   postgresql-contrib
    postgresqlの補助ファイル?
   nginx
    nginx本体

 ここでpipについて色々テストしてみる
  pip -V および pip3-V
   pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
  pip3.9 -V
   pip 20.2.3 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
  pip list およびpip3 list
   attrs 19.3.0
   Automat 0.8.0
   blinker 1.4
   certifi 2019.11.28
   chardet 3.0.4
   Click 7.0
   cloud-init 21.4
   colorama 0.4.3
   command-not-found 0.3
   configobj 5.0.6
   constantly 15.1.0
   cryptography 2.8
   dbus-python 1.2.16
   distro 1.4.0
   distro-info 0.23ubuntu1
   ec2-hibinit-agent 1.0.0
   entrypoints 0.3
   hibagent 1.0.1
   httplib2 0.14.0
   hyperlink 19.0.0
   idna 2.8
   importlib-metadata 1.5.0
   incremental 16.10.1
   Jinja2 2.10.1
   jsonpatch 1.22
   jsonpointer 2.0
   jsonschema 3.2.0
   keyring 18.0.1
   language-selector 0.1
   launchpadlib 1.10.13
   lazr.restfulclient 0.14.2
   lazr.uri 1.0.3
   MarkupSafe 1.1.0
   more-itertools 4.2.0
   netifaces 0.10.4
   oauthlib 3.1.0
   pexpect 4.6.0
   pip 20.0.2
   pyasn1 0.4.2
   pyasn1-modules 0.2.1
   PyGObject 3.36.0
   PyHamcrest 1.9.0
   PyJWT 1.7.1
   pymacaroons 0.13.0
   PyNaCl 1.3.0
   pyOpenSSL 19.0.0
   pyrsistent 0.15.5
   pyserial 3.4
   python-apt 2.0.0+ubuntu0.20.4.6
   python-debian 0.1.36ubuntu1
   PyYAML 5.3.1
   requests 2.22.0
   requests-unixsocket 0.2.0
   SecretStorage 2.3.1
   service-identity 18.1.0
   setuptools 45.2.0
   simplejson 3.16.0
   six 1.14.0
   sos 4.2
   ssh-import-id 5.10
   systemd-python 234
   Twisted 18.9.0
   ubuntu-advantage-tools 27.5
   ufw 0.36
   unattended-upgrades 0.1
   urllib3 1.25.8
   wadllib 1.3.3
   wheel 0.34.2
   zipp 1.0.0
   zope.interface 4.7.1
  既存のPythonにはパッケージがたくさん入っている

  一方、
  pip3.9 list
   pip 20.2.3
   setuptools 49.2.1
  入れたてほうはデフォルトの中身。早速pipをアップデートするが、
  sudo -m pip3.9 install --upgrade pip
  ではエラーになり、
  sudo -H pip3.9 install --upgrade pip
  で出来た。
  
 疲れたけど多分いいかんじ!
  次に仮想環境を作ってみる
  Windowsでは慣れた作業だけど同じ感じでいけるか。
  記事ではvirtualenvコマンドをインストールしてやる方法が紹介されてたけど、
  自分が慣れているvenvコマンドはインストールも不要で上位互換っぽいのでこちらで挑戦
  まずは、仮想環境を格納するためのフォルダを作る(/home/XXX/で実行)
   mkdir pyenvs
  そこに移動
   cd pyenvs
  この位置で下記を実行
   py -m venv awsmyblog
  エラー。
   python3.9 -m venv awsmyblog
  で成功。
 お馴染みのフォルダが出来た。(ただしScriptsはbinという名前になっていた)
  下記コマンドで仮想環境をアクティベート
   source awsmyblogenv/bin/activate
  無事括弧で仮想環境名が表示された!入れた!!
コメントする

このブログについて

白くまちゃん

文系が社内のKintone導入をきっかけにITを学び始め、ITエンジニアになるまでの記録。