自作railsアプリをデプロイする Part8 EC2インスタンスログイン編
前回までに作成したインフラ環境は以下の通りです。↓
Elastic IPアドレスを作成して一つのパブリックIPアドレスを専有し、無事EC2インスタンスと通信できるようになりました。
今回は、実際にEC2インスタンスにSSH通信でログインしてみます。
SSH通信を理解する
ますサーバーを構築するには、サーバーを設置するだけで終わりではありません。
サーバーが担う役割やその処理を行うためには、それらに必要なソフトウェアをインストール必要があります。
パソコンでも音楽が聞きたかったら、音楽プレーヤーアプリをインストールしますよね。それと同じようなものです。
しかし、パソコンなら手元で簡単にアプリをインストールすれば済みますが、
手元どころか物理的にどこにあるかもわからないサーバーに必要なソフトウェアをインストールするのはどうやるのでしょうか。
そこで使われるのが、SSH通信です。
SSH通信で手元のパソコンからEC2インスタンスにログインすることにより、自分があたかもサーバーの目の前にいるかのような状態になり、自分のコンピューターからサーバーを操作することができます。
さらにSSHは自分のコンピューターとサーバー間の通信が暗号化されているため、ログインした本人だけがサーバーを操作できるような仕組みになっているわけです。
まとめるとSSH通信でログインするとは、「自分のコンピュータとサーバーの通信を暗号化してセキュリティを強化している状態で、サーバーを操作してサーバー環境を構築すること」です。
EC2インスタンスにログインする
下準備
ますコマンドラインからAWS各サービスの制御ができるように、必要なものをインストールしていきます。
・python ・pip(pythonのパッケージ管理システム) ・awscli(awsをPCのコンソール上から扱うためのもの)
ターミナルからインストールしていきます。
$brew install python $brew install awscli
これで完了です。
ログイン設定
AWSでは、EC2にログインするためのユーザーとして、デフォルトでec2-userが設定されています。
次の作業では、このユーザーをつかって一度インスタンスにログインします。
ですが、今回は新たにデフォルトユーザーと同じ権限を持ったユーザーを新たに作成して、今後そのユーザーでログインできるようにしていきます。
作業リスト↓
- ec2-userでインスタンスにログイン
- 新たなユーザーの作成
- 作成したユーザーにec2-userと同様の権限を付与
- 新たなユーザーで再度ログイン
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ログインができることを確かめてから今回は終わりにします。
作業リスト↓
- ローカルで鍵の生成
- その鍵をどの通信の認証時に使用するか等を設定
- サーバーとの認証処理を行う。
- 実際に新ユーザーでログイン
ローカルでターミナルを使って、公開鍵の作成と、それをどの通信の認証と紐付けるかを設定。
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インスタンスの環境構築をやっていこうと思います。
お疲れ自分。。。。