LoginSignup
0
1

More than 1 year has passed since last update.

f13: xserver vps + ubuntu + ssh + python

Last updated at Posted at 2022-11-27

.

[ おまとめ ]

xserver vps を契約したので、設定メモです

(01) 前提事項
(02) teraterm にて ssh 接続
(03) 一般ユーザーの作成
(04) 一般ユーザーでの ssh 設定
(05) sshd_config の設定
(06) port No. 変更
(07) その他の設定
(08) ftp 接続
(09) python / pip の設定
(10) cron の設定
(11) イメージ バックアップ


[ 1. キッチン ]

 ・Xserver VPS / 2GB プラン
  -> Ubuntu 22.04 (64bit)

 ・Windows10 64bit pc
 ・Tera Term Pro version 2.3


[ 2. 調理 ]

---- (01) 前提事項 -------------------------

[ VPS パネル ] にて、以下設定をしておきます

・OS -> Ubuntu 22.04 を選択
・root パスワード設定
・SSH Key の登録、xxxx.pem キーファイルの保存
・接続許可ポート: SSH(22) ON にする
・電源操作: 起動

・ひとまずの ssh 接続 + ssh key の設定

 電源操作 の左にある 「コンソール」 より
 root にて接続し、以下 sshd_config の編集

 ・現在の設定確認
 # cat /etc/ssh/sshd_config
 ・念のため、現在の設定のバックアップ
 # cd /etc/ssh/
 # cp -R sshd_config sshd_config_bk1
 # vi /etc/ssh/sshd_config

 以下 2つを有効にする ( # を外す )
 PubkeyAuthentication yes
 AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2  

 ssh 設定反映
 # service sshd reload
 ssh リスタート
 # /etc/init.d/ssh restart

.
---- (02) teraterm にて ssh 接続 -----------

・Host: 付与されたグローバルIP
・Service: SSH
・TCP port: 22

・User name: root
・Passphrase: 空(入力なし)

 ちょっとうる覚えですが、初期段階では確か、

 /etc/ssh/sshd_config
 PermitRootLogin prohibit-password
 PasswordAuthentication no

 となっておりますので、設定した root パスワードは、
 入力しても無効ですが、
 以下 xxxx.pem にてログイン可能となります

・Use RSA/DSA/ECDSA/ED25519 key to login:
 ダウンロードした xxxx.pem ファイルを指定

.
---- (03) 一般ユーザーの作成 ---------------

※ ユーザー名は、abcd としてます

 ・ユーザーの追加
 # useradd abcd
 ・ユーザーのパスワード設定
 # passwd abcd
 ・sudo の設定
 # usermod --append -G sudo abcd
 ・home ディレクトリの作成
 # cd /home
 # mkdir abcd
 ・パーミッションの設定
 # chown abcd:abcd abcd
 # chmod 755 /home/abcd
 ・確認
 # ls -lah

.
---- (04) 一般ユーザーでの ssh 設定 --------

ユーザーのホームディレクトリに「.ssh」というディレクトリ作成し、
パーミッションを「700」に設定します

 # cd /home/abcd
 # mkdir .ssh

 # chown abcd:abcd .ssh
 # chmod 700 .ssh

 ・確認
 # ls -lah

root で使用している authorized_keys を
ユーザー側にも複製し、パーミッションを「600」に設定します
(本来は個別で ssh key を作成したほうが良いのかもしれません)

 # cd /root/.ssh/
 # cp -R authorized_keys /home/abcd/.ssh/

 # cd /home/abcd/.ssh/
 # chown abcd:abcd authorized_keys
 # chmod 600 /home/abcd/.ssh/authorized_keys

 ・確認
 # ls -lah

.
---- (05) sshd_config の設定 ---------------

 ・現在の設定確認
 # cat /etc/ssh/sshd_config

 ・念のため、現在の設定のバックアップ
 # cd /etc/ssh/
 # cp -R sshd_config sshd_config_bk2

 # vi /etc/ssh/sshd_config

 (root ログインの禁止)
 PermitRootLogin no

 (ssh キーファイル authorized_keys2 削除、しなくても大丈夫です)
 AuthorizedKeysFile .ssh/authorized_keys

 (パスワードによる ssh 接続の禁止、おそらく 初期値で no になってます)
 PasswordAuthentication no 

 (一般ユーザーの ssh 接続許可)
 AllowUsers abcd

 ssh 設定反映
 # service sshd reload
 ssh リスタート
 # /etc/init.d/ssh restart

 exit
 -> 一旦 teraterm を終了

これで、ひとまず一般ユーザーでの
ssh ログインが可能になります

※ ご注意!
 記憶では teraterm で、ssh 接続中でも、
 /etc/ssh/sshd_config の編集・反映は、できましたが、
 ( おそらく次回起動分からの有効、違ってたらすみません )
 設定変更により、ssh 接続ができなくなった場合は、
 [ VPS パネル ] 「コンソール」より
 root ないしは、作成されたユーザーで接続し、
 ssh 設定を元に戻すことになります

sshd_config リストア例
 $ cd /etc/ssh/

 ・sshd_config_bk のバックアップファイルが存在することを確認
 $ ls -lah

 ・sshd_config の削除 (いきなり消えますのでご注意)
 $ sudo rm -rf sshd_config

 ・バックアップファイルからの戻し
 $ sudo cp -R sshd_config_bk sshd_config

 ssh 設定反映
 $ sudo service sshd reload
 ssh リスタート
 $ sudo /etc/init.d/ssh restart

 これは、以降の Port No. 変更にて
 ssh 接続ができなくなった場合も、同様になります

.
---- (06) port No.変更 ---------------------

[ VPS パネル ] 接続許可ポート のメニュー
の表記 SSH(22) からも分かるとおり、
xserver vps では、ssh ポートは、22 固定となっております

ですので、/etc/ssh/sshd_config の
#Port 22 を Port 22 と有効にし、
Port 2000 などと変更しても、
ssh 接続は time out となり接続できません

ですので、port No. の管理および、変更は、
ubuntu のファイアウォール (ufw) 側で制御します

(今回の方法では、ssh 以外のポートも
[ VPS パネル ] 接続許可ポート機能を使用せず、
ufw で追加許可していく形になります)

※ ssh の Port No. は、
 well known port 以外で、3003 としてます

A. [ VPS パネル ] 接続許可ポート メニューにて
 全て許可 -> ON にします

B. 一般ユーザーにて ssh ログインし、
 ファイアウォール (ufw) 設定をします

 ufw ステータス確認
 $ sudo ufw status
 Status: inactive -> 未稼働

 IPv6 を無効化(必要の際は)
 $ cat /etc/default/ufw
 $ sudo vi /etc/default/ufw
 IPV6=no

 ファイアウォールを有効にする
 $ sudo ufw enable

 「deny(ホワイトリスト)」形式とするため、全拒否にします
 $ sudo ufw default deny

 現存接続を維持するため、22 と、切り替え予定の 3003 を許可します
 $ sudo ufw allow 22
 $ sudo ufw allow 3003

 ufw 再読み込み
 $ sudo ufw reload
 -> ファイアウォールを再読込しました
 設定内容の確認
 (ルール番号を表示する「numbered」オプションを付けます)
 $ sudo ufw status numbered
 Status: active
      To     Action      From
      --     ------      ----
 [ 1] 22    ALLOW IN    Anywhere
 [ 2] 3003  ALLOW IN    Anywhere
 特定のIPアドレスのみ通信を許可する
 $ sudo ufw allow from xxx.xxx.xxx.xxx to any port 3003

などを行うとさらにセキュリティ強化になります

C. ssh_config の port No.変更

 ・現在の設定確認
 $ cat /etc/ssh/sshd_config

 デフォルト値は #Port 22
 -> # で無効扱いになっているものの、22 で機能してます

 ・念のため、現在の設定のバックアップ
 $ cd /etc/ssh/
 $ sudo cp -R sshd_config sshd_config_bk3

 ・22 -> 3003 へ変更
 $ sudo vi /etc/ssh/sshd_config
 Port 3003

 ssh 設定反映
 $ sudo service sshd reload
 ssh リスタート
 $ sudo /etc/init.d/ssh restart

 exit
 -> 一旦 teraterm を終了

D. 変更後の port No. で ssh 接続を確認

-> これで、ssh の指定 Port No. での接続が可能になります
-> 無事接続が確認できましたら、No.22 を削除します

 ・ 設定を確認(削除前)
 $ sudo ufw status numbered
 Status: active
      To     Action      From
      --     ------      ----
 [ 1] 22    ALLOW IN    Anywhere
 [ 2] 3003  ALLOW IN    Anywhere

 ・ [ 1 ] の 22 を削除
 $ sudo ufw delete 1

 ・ 設定を確認(削除後)
 $ sudo ufw status numbered
 Status: active
      To     Action      From
      --     ------      ----
 [ 1] 3003  ALLOW IN    Anywhere

今回は、ssh 指定 Port No. のみの許可ですので、
その他のポートもお好みで ufw で追加許可します

.
---- (07) その他の設定 ---------------------

E. コンソール 設定

ubuntu + teraterm/ssh で不便になっている
以下を快適にします

 E1. 十字キー/TABキー 入力補完

 $ cat /etc/passwd
 abcd:x:1001:1001::/home/abcd:/bin/sh

 デフォルトのシェル /bin/sh を /bin/bash に変更
 $ sudo chsh -s /bin/bash abcd

-> 変更した段階ではまだ sh のままなので、
  以下の bash コマンド ($ source) を使用する前に、
  一旦、exit で抜けて、再度 ssh ログインして
  bash の利用を可能にしておきます

 E2. コンソールの日本語表示を英語にする
 (ユーザー環境変数ファイル作成)

 ( .bashrc 作成)
 $ cd /home/abcd/
 $ touch .bashrc
 $ chmod 644 .bashrc

 (英語固定表記 [export LANG=en_US] を追記保存)
 $ sudo vi .bashrc
 export LANG=en_US

 ( .bash_profile も複製)
 $ cp -R .bashrc .bash_profile

 (更新を反映させる)
 $ source .bashrc
 $ source .bash_profile

F. zip ツール

何かと要りようなので、入れておきます

 $ sudo apt update
 $ sudo apt install zip
 $ sudo apt install unzip

.
---- (08) ftp 接続 -------------------------

上記 (6) までの ssh 設定、接続が完了してましたら、
filezilla などで、
sftp / IP / ssh 指定 Port No.
作成したユーザーID + xxxx.pem (ssh キーファイル)

にて接続ができます

.
---- (09) python / pip の設定 --------------

xserver vps の ubuntu 22.04 で
インストールされている python は、
ver 3.10.6 で、特に不便はないので
このまま使用します

pip はインストールされてませんので、
設定していきます

 $ /bin/python3 --version
 Python 3.10.6

 $ /bin/python3.10 --version
 Python 3.10.6

 $ which python3
 /usr/bin/python3

 $ which python3.10
 /usr/bin/python3.10

 $ which pip -> なし
 $ which pip3 -> なし

 (pip のインストール)
 $ sudo apt update
 $ sudo apt install python3-pip

 $ which pip
 /usr/bin/pip

 $ which pip3
 /usr/bin/pip3

 (pip パッケージデフォルトモジュールの確認)
 $ pip list

あとは、お好みの pip を入れて完了です

$ /usr/bin/python3 /home/abcd/test/test01.py

こんな感じで実行できます

.
---- (10) cron の設定 ----------------------

上記 (09) で確認した python の自動実行を
設定してみます

crontab コマンドは、
crontab -r で削除されてしまうから使ってはダメです
/etc/crontab(ファイル)を使用しなさい
などと言われておりますが、

・ユーザー単位で使用したい
・消えても再設定する

ので、crontab コマンドを使用します

※ ビジネス現場での使用の場合は考慮してください

 ちなみにこのような回避をされる方もいらっしゃいます
 危険な crontab -r を封印する
 https://qiita.com/kawaz/items/1620300551b5b3f2eccc

G. 設定エディタの選択

crontab コマンド初回実行時、編集を行うエディタの選択画面が
表示されます

 Select an editor.  To change later, run 'select-editor'.
 1. /bin/nano <---- easiest
 2. /usr/bin/vim.basic
 3. /usr/bin/vim.tiny
 4. /bin/ed

お好みの エディタの番号を入力して Enter を押します
私は 2. vi にしましたが、
選択を間違えた場合は、いつでも

$ select-editor

で、変更できます

H. ログ出力 の追加

python ロジック内で、cron 実行結果ログに出力される
標準出力(stdout)、エラー出力(stderr) の記述をしておきます
-> print('xxxx') のことです

sample1.py
import datetime
now1 = datetime.datetime.now()
now2 = '{0:%Y/%m/%d %H:%M:%S}'.format(now1)

aaa = 0

if aaa == 1:
	print(now2 + ': OK')
else:
	print(now2 + ': NG')
sample2.py
import datetime
now1 = datetime.datetime.now()
now2 = '{0:%Y/%m/%d %H:%M:%S}'.format(now1)

ccc = ''

try:
	bbb()
	ccc = 'OK'
except Exception as e01:
	ccc = 'NG: ' + str(e01)

print(now2 + ': ' + ccc)

次に、ログファイルを作成しておきます

 $ cd /home/abcd/test/
 $ mkdir log
 $ chmod 705 log
 $ cd log
 $ touch test01.log
 $ chmod 604 test01.log

I. crontab の設定

[設定例]
・毎日 22:10pm に実行されます
・cron にて test01.py が実行され、
 ./log/test01.log に実行結果ログが出力されます

 $ crontab -u abcd -e

(選択したエディタが起動されます)
(以下を追記して保存します)

 10 22 * * * /usr/bin/python3 /home/abcd/test/test01.py >> /home/abcd/test/log/test01.log 2>&1
 確認
 $ crontab -l

.
---- (11) イメージ バックアップ ------------

xserver vps では 50GB までの
イメージ保存領域が利用できます

保存したイメージはOS再インストールや
新しいサーバーの作成に活用できます

とのことで、各種設定が終わりましたら、念のため
イメージバックアップ保存をしておいたほうが良いです

ちなみに、上記設定後のバックアップで、
4.93GB 使用となりました


[ 3. 食感 ]

※1 取り急ぎの実行環境の作成になります、
  その他のセキュリティ設定は別途行ってください

※2 ちなみにドメイン未設定での記事になります

※3 ほぼ ubuntu の設定ですので、[ VPS パネル ] での設定以外、
 他社 vps と似たような感じでいけると思います

※4 今回こちらで確認した環境設定ですが、
  使用環境やバージョンにより必ず同じ環境にはならないかもしれません
  失敗しましたら、vps の醍醐味である、
  OS 再インストールを行ってリトライしてみてください


.

0
1
0

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
  3. You can use dark theme
What you can do with signing up
0
1