AWS Cloud9の使い方〜SSH接続編〜

AWS Cloud9の導入方法〜SSH接続編〜

AWS Cloud9で環境構築する方法は2つありますが、この記事ではSSH接続して利用する方法を解説していきます。
SSH接続できればよいのでAWS以外の他社のVPSなどに接続して利用することも可能ですが、今回はAWSで立てたEC2インスタンスに接続してみたいと思います。
※レンタルサーバーはroot権限が使えない場合が多いので導入は難しそうです。

新しいEC2インスタンスを作成して利用する方法は別記事で解説していますので「AWS Cloud9の導入方法〜新しいEC2インスタンス作成編〜」をご覧ください。

SSH接続情報の入力

すでにAWS Cloud9から接続するサーバーを構築済みと仮定して話を進めていきます。
今回はFastPressを使用しました。

まずはAWS Cloud9の環境作成画面に行きます。
コンソールにログイン後、「サービス」→「Cloud9」をクリック。

AWSコンソール 「サービス」→「Cloud9」

AWS Cloud9は東京リージョンには対応していないので他のリージョンで使用する形となります。
どのリージョンを選んでも問題ありませんが、今回は「アジアパシフィック(シンガポール)」で利用します。

AWS Cloud9 リージョン選択

AWS Cloud9の画面に移りますので「Create environments」をクリックして環境作成画面に移動します。

AWS Cloud9 ダッシュボード

Name」にユニークな名前を入力し、「Next step」をクリック。

今回は「SSH Cloud9」と入力しました。 AWS Cloud9 Name、Description入力

設定画面に移りますので、「Environment type」の項目で「Connect and run in remote server (SSH)」にチェックを付けます。

AWS Cloud9 Environment type選択

次はSSHの接続情報(User、Host、Port)を入力していきます。

AWS Cloud9 User、Host、Port入力

FTPも利用する場合、「User」はFTPと同じユーザー名とするのがよいでしょう。
今回は「fastpress」と入力しました。
Host」にはパブリックIPを入力。
Port」は各サーバーの環境に合わせて適当に変更してください。
今回は22と入力しました。

公開鍵の登録

次は接続するサーバーに公開鍵を登録します。
Copy key to clipboard」をクリックして公開鍵をコピーします。

AWS Cloud9 公開鍵コピー

そして/home/ユーザー名/.ssh/authorized_keysにコピーした公開鍵を追記します。
今回はユーザー名をfastpressとしたので追記するファイルは/home/fastpress/.ssh/authorized_keysとなりますが、確認したところ存在しなかったので新しく作成します。(環境作成画面はそのままにしておいてください)

rootでログイン後、ユーザーのホームディレクトリに移動します。

cd /home/fastpress

.sshディレクトリを作成し、

mkdir .ssh

パーミッションを700に変更します。

chmod 700 .ssh

次にtouchコマンドでauthorized_keysを作成し、

touch .ssh/authorized_keys

viコマンドで編集

vi .ssh/authorized_keys

iでインサートモードにし、先程コピーした公開鍵を追記します。
そしてescでインサートモードを終了し、:wqで上書き保存します。

保存が完了したらauthorized_keysのパーミッションを600に変更します。

chmod 600 .ssh/authorized_keys

最後に.ssh以下のファイルの所有者とグループをユーザー名に変更します。

chown -R fastpress.fastpress .ssh

これで公開鍵の登録は完了です。

SSH接続がうまくいかなかったら…

SSH接続に失敗すると「AWS Cloud9 couldn’t connect to SSH server …」というエラーが表示されます。

AWS Cloud9 SSH接続エラー

原因は公開鍵の登録がうまくできていなかったり、authorized_keysのパーミッションやSSHのポート番号が違うことなどが考えられます。
ここでは原因を特定する方法として、エラーログを確認する方法をご紹介します。

まず、

vi /etc/ssh/sshd_config

でsshd_configを編集します。

ファイルの中に#LogLevel INFOという項目がありますので、iでインサートモードにし、先頭の#を削除してINFOをDEBUG書き換えてください。

#LogLevel INFO
↓
LogLevel DEBUG

書き換えが完了したらescでインサートモードを終了し、:wqで上書き保存します。
そして設定を反映させるためにsshdを再起動します。

systemctl restart sshd.service

そしてこの状態でエラーログを残すために、もう一度SSH接続を試してください。
AWS Cloud9 couldn’t connect to SSH server …」というエラーが再度表示されると思います。
これでエラーログが記録されたはずなのでcatコマンドでエラーログを確認してみましょう。

cat /var/log/secure

行数が多いと思いますが、1行1行確認していけば原因が特定できると思います。

次はPythonとNode.jsをインストールしていきます。

Python、Node.jsのインストール

Cloud9をインストールするためにはサーバーにPythonとNode.jsをインストールする必要があります。
Pythonは2.7、Node.jsは0.6.16以降のバージョンが必要です。
AWS Cloud9 SSH Development Environment ホスト要件 – AWS Cloud9

まずバージョンを確認します。

python -V
2.7.5
node -v
-bash: node: コマンドが見つかりません

Pythonはバージョン2.7.5がインストールされていますが、Node.jsはインストールされていないようなのでNode.jsをインストールしていきます。

まずはSSH接続ユーザー(今回の場合はfastpress)にroot権限を与えましょう。

rootアカウントでvisudoコマンドを実行。
iでインサートモードにし、一番下辺りに

fastpress            ALL=(ALL)      NOPASSWD: ALL

を追記。
escでインサートモードを終了し:wqで上書き保存します。

これでfastpressにroot権限が与えられましたのでsu fastpressでアカウントを切り替えインストール作業に入ります。

まずはユーザーのホームディレクトリに移動

cd /home/fastpress

システムのアップデート

sudo yum -y update

g++コンパイラのインストール

sudo yum -y install gcc-c++

Gitのインストール

sudo yum -y install git

nvmのダウンロード

git clone https://github.com/creationix/nvm.git ~/.nvm

nvmへパスを通す

source ~/.nvm/nvm.sh

nvmコマンドへのパスの設定

vi ~/.bash_profile

で編集モードにし、以下を.bash_profileに追記。

# nvm
if [[ -s ~/.nvm/nvm.sh ]] ; then
        source ~/.nvm/nvm.sh ;
fi

Node.jsの最新バージョンをインストール

nvm install node

バージョンの確認

node -v
v10.7.0

使用するバージョンを指定

nvm use v10.7.0
Now using node v10.7.0

これでNode.jsのインストールは完了です。

インストールが完了したらwhich nodeでバイナリのパスが表示されますのでこれをコピーしておきます。(あとで使います)

which node
~/.nvm/versions/node/v10.7.0/bin/node

次はCloud9をインストールします。

Cloud9のインストール

先程の環境作成画面に戻り、Advanced settingsのEnvironment pathに作業するディレクトリのパスを、Node.js binary pathに先程コピーしたバイナリのパスを入力し「Next step」をクリック。

AWS Cloud9 Advanced settings入力

SSH接続、Python・Node.jsのインストールが完了していれば確認画面に進みますので、そのまま「Create environment」をクリック。

AWS Cloud9 確認画面

作成中画面に切り替わりますので、作成が完了するまで数分待ちましょう。

AWS Cloud9 環境作成中画面

Installation Completedと表示されたらインストール完了です。

AWS Cloud9 インストール完了

10分以上経っても画面が変わらない場合はエラーが発生して処理が止まっている可能性が考えられます。
その場合、一旦タブを閉じて「AWS Cloud9」の「Your environments」から先程作成した環境の「Open IDE」をクリックし、再度インストール画面を開きましょう。

そして「Always install everything」にチェックを付けずに、「Next」をクリックして画面を進めてください。

AWS Cloud9 インストール画面 AWS Cloud9 インストール画面2

これでもしインストール中にエラーが表示されたらメッセージを確認し、対処しましょう。
念の為、私がインストール中に遭遇したエラーについて対処法を記載しておきます。

インストール中のエラーについて

curses not found, Installed tmux does not appear to work

AWS Cloud9 Tmuxインストールエラー

Tmuxのインストールに失敗した時に出るメッセージのようです。
この場合は、下記記事を参考にTmuxをインストールしてください。
AWS Cloud9のインストール時に”curses not found”が発生して進まない。

usermod: グループ ‘docker’ は存在しません

AWS Cloud9 Dockerインストールエラー

Dockerのインストールで失敗した時に出るメッセージのようです。
色々検索してみましたが、現時点で解決策は見つかりませんでした。
解決策をご存知の方がいましたら、この記事のコメントで教えてくださいm(_ _)m

Dockerを使わない場合は、「Previous」で前の画面に戻り、「c9.ide.lambda.docker」のチェックを外し「Next」をクリックしてください。

AWS Cloud9 Dockerのチェックを外す

これで正常にインストールできるはずです。

まとめ

AWS Cloud9の導入方法〜新しいEC2インスタンス作成編〜」と比べるとインストールの手間は少々かかりますが、Cloud9の使用料が無料で、好きなサーバーに接続して使えるというのはかなり魅力的ではないでしょうか。

ちなみに私の開発環境もAWS Cloud9を使用しています。(KUSANAGI for AWSで構築したサーバーにSSH接続して利用)