
Hexoブログを公開する
前回作成したローカル環境のHexoブログを外部に公開する。
前回↓

ConoHa VPSを契約し、セキュリティを強化し、publicファイルを転送し、外部からアクセスする。
1. Conoha VPSを契約
ConoHa VPSから「お申し込み」する。

会員ページからサーバー追加。

「リージョン」は「東京」、
「メモリ」は「1GB」。

ここでイメージタイプのタブを「OS」から「アプリケーション」へ、
「アプリケーション」は、やりたい内容に合わせたソフトが適切なバージョンの組み合わせでインストールされているので楽かつ安全。
今回は「LEMP(PHP)」

「rootパスワード」と「ネームタグ」を適当に作成。

オプションの「SSH Key」で「キーを新規作成」。
適当な名前で「自動作成」、「追加」すると鍵が作られる。

「ダウンロード」を押すと。「〇〇.pem」という名前のプライベートキー(秘密鍵)が手に入る。
名前が長いので「key.pem」とする。

さっき作ったパブリックキー(公開鍵)が自動で選択される。

「スタートアップスクリプト」の「テンプレート」を選び、「Fail2banインストール」を選択。
これにより、同一IPからの連続ログイン失敗を検知するとそのIPからのアクセスを禁止してくれる。つまり総当たり攻撃を防ぐことができる。

こんなかんじになった。

「追加」するとサーバーを作ってくれる。

サーバーリストから今作ったサーバ-を選択すると「コントロールパネル」が開く。

括弧の中が今作ったサーバーのIPアドレス、これだと118.27.14.98。
また、下のパネルからサーバーが操作できる。右端の「サーバー削除」が一番よく使うやつ、訳が分からなくなったら全部消すことができる。

2. セキュリティを強化
sshを使ってさっき作ったサーバに入る。
その後セキュリティ設定。
最近のWindowsは最初からsshが使えてえらい。
2.1. サーバに入る
ipアドレスが118.27.14.98なので、
ターミナルから
1 | ssh root@118.27.14.98 |
と打ってみる。
入れない。
1 | root@118.27.14.98: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). |
と言われる。
オプションでSSH Keyを選択したので秘密鍵がなければ入れないようになっている。
cdコマンドでさっきダウンロードした秘密鍵(key.pem)のとこにいくか秘密鍵の方を持ってくるかして、
1 | ssh root@118.27.14.98 -i key.pem |
と秘密鍵を指定すると入れる。-iはidentity fileを指定しますという意味。
うまくいくと
1 | ================================================ |
と言われる。
Enjoy!
2.2. 別のユーザを作る
セキュリティ上、rootユーザがsshログインできると良くない。今はrootユーザ以外存在しないため、
- 新たなユーザを作り、
- 新たなユーザが鍵認証ログインできるようにし、
- rootユーザのログインを禁止し、以降は新たなユーザでログインする。
2.2.1. 新たなユーザを作る
1 | adduser username # usernameという名前のユーザを新規作成 |
パスワードをpasswordにしたらBAD PASSWORDと言われた。
2.2.2. 新たなユーザが鍵認証ログインできるようにする
1 | cd /home/username |
別のターミナルから
1 | ssh username@118.27.14.98 -i key.pem |
と打って入れたらOK
2.2.3. root ログイン禁止
sshd_configはsshの設定ファイル。これをviというエディタで編集する。
1 | vi /etc/ssh/sshd_config |
と打つとviが起動してファイルの中身が表示される。viで使うコマンドは今後の人生で4つだけ。i(文字が編集できるモードになる),Esc(右2つのコマンドが打てるモードになる),:wq(保存して終了),:q!(保存せず終了) 。
sshd_configの中で変えるのは一か所だけ
1 | PermitRootLogin yes |
を
1 | PermitRootLogin no |
にします。
service sshd restartと打つとsshd_configの内容変更が反映される。
別のターミナルから
1 | ssh root@118.27.14.98 -i key.pem |
と打って入れなければOK。
2.3. SSHポート番号変更
SSHのポート番号はデフォルトでは22、みんな知ってるので適当な番号に変える。
同様に
1 | vi /etc/ssh/sshd_config |
で設定ファイルを開き、
1 | #Port 22 |
をとりあえず
1 | Port 50000 |
にする(49152~65535の中から選択)。service sshd restartと打って変更を反映。
続いて
1 | vi /usr/lib/firewalld/services/ssh.xml |
と打ってファイアウォールの設定ファイルを編集。
1 | <port protocol="tcp" port="22"/> |
を
1 | <port protocol="tcp" port="50000"/> |
にします(さっきと同じ番号)。
firewall-cmd --reloadと打ってファイアウォールの設定変更を反映。
別のターミナルから
1 | ssh username@118.27.14.98 -i key.pem |
と打つとポート番号が違うためConnection timed outとなる。
1 | ssh username@118.27.14.98 -i key.pem -p 50000 |
と打って入れたらOK。-pはポート番号を指定しますという意味。
3. publicフォルダを転送し、外部からアクセスする
前回作ったpublicフォルダをサーバに送る。
3.1. scpでpublicフォルダを転送
scpというコマンドを使うとsshを使いながらファイルを転送できる。
ローカルPC側でpublicフォルダのとこにいくかpublicフォルダの方を持ってくるかして、
1 | scp -P 50000 -r -i key.pem public username@118.27.14.98:/usr/local/openresty/nginx/ |
とすると失敗する。
1 | scp: /usr/local/openresty/nginx//public: Permission denied |
権限がないらしい。
今publicを置こうとしている/usr/local/openresty/nginx/がrootのものなので、scpを実行しているusernameには権限がない。rootでscpを使えば良かったがrootでのログインはさっき禁止した。順番間違えた。
なのでサーバー側で/usr/local/openresty/nginx/の所有権をusernameに移す。
1 | chown username /usr/local/openresty/nginx/ |
もう一度scp
1 | scp -P 50000 -r -i key.pem public username@118.27.14.98:/usr/local/openresty/nginx/ |
-Pはポート番号を指定しますという意味。-pではない。-rはフォルダごと送りますという意味。これがないとファイルしか送れない。
3.2. ブログをサーバ上で公開
1 | vi /usr/local/openresty//nginx/conf/nginx.conf |
と打ってnginxの設定ファイルを編集。
1 | location / { |
を
1 | location / { |
にする。
/usr/local/openresty/nginx/sbin/nginx -s reloadと打ってnginxの設定変更を反映。
ブラウザから118.27.14.98を確認。

見れた。

スマホからも見れた。
参考
Opensouce & Setup
CentOS 8 で ssh ポートを変更
https://mxnl.com/centos-ssh-port/
IT専科
UNIX/Linuxコマンド ABC順
http://www.itsenka.com/contents/development/unix-linux/index-abc.html




