りょ〜Blog

プログラミングで学んだことを書いていきます。

自作railsアプリをデプロイする Part8 EC2インスタンスログイン編

前回までに作成したインフラ環境は以下の通りです。↓

f:id:Ryo10Leo:20200113011243p:plain

Elastic IPアドレスを作成して一つのパブリックIPアドレスを専有し、無事EC2インスタンスと通信できるようになりました。

今回は、実際にEC2インスタンスSSH通信でログインしてみます。

SSH通信を理解する

ますサーバーを構築するには、サーバーを設置するだけで終わりではありません
サーバーが担う役割やその処理を行うためには、それらに必要なソフトウェアをインストール必要があります。

パソコンでも音楽が聞きたかったら、音楽プレーヤーアプリをインストールしますよね。それと同じようなものです。

f:id:Ryo10Leo:20200113142536p:plain

しかし、パソコンなら手元で簡単にアプリをインストールすれば済みますが、

手元どころか物理的にどこにあるかもわからないサーバーに必要なソフトウェアをインストールするのはどうやるのでしょうか。

f:id:Ryo10Leo:20200113143635p:plain

そこで使われるのが、SSH通信です。

SSH通信で手元のパソコンからEC2インスタンスにログインすることにより、自分があたかもサーバーの目の前にいるかのような状態になり、自分のコンピューターからサーバーを操作することができます。

f:id:Ryo10Leo:20200113221224p:plain

さらにSSH自分のコンピューターとサーバー間の通信が暗号化されているため、ログインした本人だけがサーバーを操作できるような仕組みになっているわけです。

まとめるとSSH通信でログインするとは、「自分のコンピュータとサーバーの通信を暗号化してセキュリティを強化している状態で、サーバーを操作してサーバー環境を構築すること」です。

EC2インスタンスログインを図で理解する。

f:id:Ryo10Leo:20200113222855p:plain

今回はインスタンスSSHでログインするまでをやっていきます。

EC2インスタンスにログインする

下準備

ますコマンドラインからAWS各サービスの制御ができるように、必要なものをインストールしていきます。

・python
・pip(pythonのパッケージ管理システム)
・awscli(awsをPCのコンソール上から扱うためのもの)

ターミナルからインストールしていきます。

$brew install python
$brew install awscli

これで完了です。

ログイン設定

AWSでは、EC2にログインするためのユーザーとして、デフォルトでec2-userが設定されています。
次の作業では、このユーザーをつかって一度インスタンスにログインします。
ですが、今回は新たにデフォルトユーザーと同じ権限を持ったユーザーを新たに作成して、今後そのユーザーでログインできるようにしていきます。

作業リスト↓

  1. ec2-userでインスタンスにログイン
  2. 新たなユーザーの作成
  3. 作成したユーザーにec2-userと同様の権限を付与
  4. 新たなユーザーで再度ログイン

ec2-userでログインするまでのコマンドは以下の通りです↓

*[ ~ ] $: mv Downloads/aaa.pem .ssh/
(#作成した公開鍵をsshフォルダに移動)
*[ ~ ] $: cd .ssh/
(#ディレクトリをsshに移動)
*[ .ssh ] $: chmod 600 aaa.pem
(#公開鍵に600番で定義されたアクセス権を付与する)
*[ .ssh ] $: ssh -i aaa.pem ec2-user@32.80.120123
(#公開鍵を利用してec2-userとしてログイン)

※最後の@以降のURLは、作成したEC2インスタンスと紐付けたElastic IPにしてください。
ryo10leo.hatenablog.com

するとこんな画面が↓

The authenticity of host '13.23.~~~~~~(13.23~~~~~~)' can't be established.
ECDSA key fingerprint is SHA256:1NzIbO/~~~~~~~~~~~~~~~~~~~~~~~~.
Are you sure you want to continue connecting (yes/no)? 

これは初めて入るサーバーにのみ表示されるものです。
初めて入るサーバーですけど信頼しても大丈夫ですか?」という意味です。
yes」を押しましょう。

続いて新たなユーザーを作成します。

そのあと作成したユーザーにマスター権限を与えていきます。

ユーザーを作成します。↓

$ sudo adduser ryo

パスワードを設定します。↓

$sudo passwd ryo
ユーザー ryo のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

sudoコマンドの設定ファイルの中身を開いて、作成したユーザーに権限を付与する文を記述します↓

・
・
↓以下の部分を探してください
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
ryo     ALL=(ALL)       ALL  ←こちらを追加
・
・

あとは、escを押してInputモードを終了し、

Shift + zz で保存&編集完了です。

編集が完了すれば、

[ec2-user|~]$ sudo su - ryo

でユーザーを切り替えます。

[ec2-user|~]の「ec2-user」が「ryo」に変わっていれば成功!

SSH通信によるインスタンスへのログイン

先ほどもec2-userでログインしましたが、作成したユーザー(ryo)でsshログインができることを確かめてから今回は終わりにします。

作業リスト↓

  1. ローカルで鍵の生成
  2. その鍵をどの通信の認証時に使用するか等を設定
  3. サーバーとの認証処理を行う。
  4. 実際に新ユーザーでログイン

ローカルでターミナルを使って、公開鍵の作成と、それをどの通信の認証と紐付けるかを設定。

local
[~]$ cd .ssh
[.ssh]$ ssh-keygen -t rsa
(公開鍵を作成)
-----------------------------
Enter file in which to save the key ():sample_key_rsa 
(ファイル名をつけて、エンター)
Enter passphrase (empty for no passphrase): 
(そのままエンター)
Enter same passphrase again: 
(そのままエンター)
-----------------------------

[.ssh]$ ls
#「sample_key_rsa」と「sample_key_rsa.pub」が生成されたことを確認
[.ssh]$ vi config
(VIMを起動します。設定ファイルを編集)
-----------------------------
↓以下を追記
Host sample_key_rsa
  Hostname Elastic IP (自分で前取得したやつ)
  Port 22
  User ryo (先ほど作ったユーザー名)
  IdentityFile ~/.ssh/sample_key_rsa (秘密鍵の設定)
-----------------------------
[.ssh]$ cat sample_key_rsa.pub
(鍵の中身開いて、ターミナル上に出力→ssh-rsa~~~~~localまでをコピーしておく)

ここからサーバー側で設定していきます。

[ryo|~]$ mkdir .ssh
[ryo|~]$ chmod 700 .ssh
[ryo|~]$ cd .ssh
[ryo|.ssh]$ vi authorized_keys
(vimが開きます)
-----------------------------
ssh-rsa ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.local
(先ほどコピーした鍵の中身を貼り付け)
-----------------------------
[ryo|.ssh]$ chmod 600 authorized_keys
[ryo|.ssh]$ exit
[ec2-user|~]$ exit

これで新ユーザー(ryo)に権限が付与されました。
ローカルで下記のコードを打つとログインできるようになります。

ssh ratio_key_rsa

無事できました!!
ブログ書きながら「よし!よし!」言いながらの作業だったので、かなーーーーーり時間かかりました。笑
実は鍵を無くして、インスタンスを作り直したのは内緒です。

次の記事では、EC2インスタンスの環境構築をやっていこうと思います。

お疲れ自分。。。。

ryo10leo.hatenablog.com