Chapter4 4-4-5 SSHでログイン での「アクセス拒否(Permission denied(publickey))」(エラー)を解決
4-4-5 SSHでログイン での「アクセス拒否(Permission denied(publickey))」(エラー)を解決
前回の記事での4-4-5 SSHでログイン でのエラー
を解決していく
いろいろ調べた結果、作成したスタックとSSH鍵を消して入れ直したらエラーを解決できることが多いらしい
スタックと鍵を削除していく
$ cdk destroy
このコマンドでスタックを削除していく
次に
$ aws ec2 delete-key-pair --key-name "HirakeGoma"
と
$ rm -f ~/.ssh/HirakeGoma.pem
この2つのコマンドを実行してSSH鍵を削除
これでスタックと鍵を削除することができた
スタックと鍵を入れ直していく
この記事の「4-4-3やり直し」と「4-4-4をもう一度実行」を参考に鍵とスタックを入れ直す
再度4-4-5 SSHでログインを試す
4-4-4のデプロイで新しく表示されたIPアドレスで
$ ssh -i ~/.ssh/HirakeGoma.pem ec2-user@<IPアドレス>
を実行
そうしたら「アクセス拒否」と出ずに絵文字の絵が出てくる
これにて4-4-5SSHでログイン をすることができた
Chapter4 4-4-5 SSHでログイン での「アクセス拒否(Permission denied(publickey))」(エラー)
4-4-5 SSHでログイン での「アクセス拒否(Permission denied(publickey))」(エラー)
4-4-4 デプロイを実行ができたらさっそくSSHでログインしてみよう
前回の4-4-4をしたときに起動したインスタンスのパブリックIPアドレスが表示されたのでそのIPアドレスを使っていく
MyFirstEc2.InstancePublicIp = のところがIPアドレス
画像はIPアドレスを一部隠してるが「1*.***.**.*0」という数字がわかると思うこの数字を
$ ssh -i ~/.ssh/HirakeGoma.pem ec2-user@<IPアドレス>
このコマンドの
<IPアドレス> というところに1*.***.**.*0を当てはめて実行する
「yes か no」を選ぶことになるのでyesと入力して実行
そうしてしばらくたったらアクセス拒否と出てログインを失敗を失敗した
<追記>エラーを解決することができた。
詳しいことは下の記事から
Chapter4
4-1 準備
はじめに
$ git clone https://github.com/tomomano/learn-aws-by-coding-source-code.git
このコマンドを入力して本ハンズオンで使用するプログラムのソースコードをダウンロード
4-4-1 Pythonの依存ライブラリのインストール
Pythonの依存ライブラリをインストール。Pythonライブラリを管理するツールのvenvを使用していく
まずは、handson/ec2-get-startedに入っていく
$ cd handson/ec2-get-started
と入力して実行
ディレクトリに移動できたので
$ python3 -m venv .env
$ source .env/bin/activate
$ pip install -r requirements.txt
*コマンド3つめを実行するときの画面
この3つのコマンドを実行して、ダウンロードできたら無事Pythonの環境構築は完了
4-4-3 SSH鍵の生成
EC2インスタンスにはSSHを使ってログインする。なのでハンズオン専用に使うSSHの公開鍵・秘密鍵のペアを準備する必要がある
$ export KEY_NAME="HirakeGoma"
$ aws ec2 create-key-pair --key-name ${KEY_NAME} --query 'KeyMaterial' --output text > ${KEY_NAME}.pem
この2つのコマンドを入力して実行できたら、現在のディレクトリ「HirakeGoma.pem」というファイルが作成された。これがサーバーにアクセスするための秘密鍵である。
SSHでは、秘密鍵は ~/.ssh/ というディレクトリに配置されるのが一般的であるので、鍵ファイルの移動を行う。
$ mv HirakeGoma.pem ~/.ssh/
$ chmod 400 ~/.ssh/HirakeGoma.pem
この2つのコマンドを入力して実行できたら移動完了。
ついでにファイルのアクセス権限をchmodにより400に設定している
4-4-4 デプロイを実行
EC2のインスタンスをデプロイする準備ができたので、デプロイを実行していく
$ cdk deploy -c key_name="HirakeGoma"
そしたらエラー
このエラーを解決することができなかった...
<追記>エラーを解決することができた。
詳しいことは下の記事から
Chapter4 4-4-4 デプロイを実行 でのエラーを解決
前回の4-4-4 デプロイを実行という所で
$ cdk deploy -c key_name="HirakeGoma"
このコマンドを実行したら
このエラーが出た。
いろいろ調べた結果
$ cd handson/ec2-get-started
このコマンドでhandson/ec2-get-startedのディレクトリに入った状態で4-4-1の箇所から作業をしないといけないようだった。
なので4-4-1からhandson/ec2-get-startedに入った状態でやり直していく。
$ cd handson/ec2-get-started
4-4-1やり直し
$ python3 -m venv .env
$ source .env/bin/activate
$ pip install -r requirements.txt
このコマンドを入力して実行
4-4-3やり直し
$ export KEY_NAME="HirakeGoma"
$ aws ec2 create-key-pair --key-name ${KEY_NAME} --query 'KeyMaterial' --output text > ${KEY_NAME}.pem
このコマンドを入力して実行
そしたら「aws configureの設定をしてください」とでたので
「$ aws configure」このコマンドを実行して
設定をまたしていく
設定したらもう一度
$ export KEY_NAME="HirakeGoma"
aws ec2 create-key-pair --key-name ${KEY_NAME} --query 'KeyMaterial' --output text > ${KEY_NAME}.pem
このコマンドを入力して実行
そしたら最初の過程で既にHirakeGomaのSSH鍵はできてるのでこのままで良き
4-4-4をもう一度実行
準備をし直したのでもう一度デプロイを実行していく
$ cdk deploy -c key_name="HirakeGoma"
このコマンドを入力して実行
そしたらエラーが出ずに成功
Chapter4 4-4-4 デプロイを実行 でエラー発生
今までの準備でインスタンスをデプロイするための準備が整った。
なので次のコマンドでアプリケーションをAWSにデプロイする
$ cdk deploy -c key_name="HirakeGoma"
このコマンドを実行
すると
エラー発生
今まで出てきたエラー文と少し違う
筆者もエラー文を理解しようとしたがあまり英文を理解することができなかった
今の所自分が思ってるエラー内容は「appのコマンドや、cdk.jsonか〜/.cdk.jsonなどが必要」と翻訳しています。ただappコマンドやcdk.jsonなどを調べてエラーを解決しようとしたが解決することができなかった。
<追記>エラーを解決することができた。
詳しいことは下の記事から
ハンズオンのプログラムを使うには
ubuntuでハンズオンのプログラムを使うには
最初にubuntuを起動したときは
$ docker run -it tomomano/labc
このコマンドを実行しないとハンズオンのプログラムが使えない
なお筆者がこのコマンドを実行したら
とエラー、エラー文を読んで簡単に説明すると「dockerデーモンが起動してないよ」と書かれていた。
なのでdockerデーモンを起動するコマンドを入力する
$ sudo service docker start
これでdockerデーモンを起動することができた
dockerデーモンが起動できたので改めて
$ docker run -it tomomano/labc
を実行
正常に実行できたら左の緑文字の部分が変化する
*筆者の場合だと「ht20a092@ht20a092pc」から「root@aws-handson」に変化
これでハンズオンのプログラムが使えるようになる
3-4-3ミニ・ハンズオン:AWS CLIを使ってみよう
3-4-3 ミニ・ハンズオン:AWS CLIを使ってみよう
$ bucketName="mybucket-$(openssl rand -hex 12)"
$ echo $bucketName
$ aws s3 mb "s3://${bucketName}"
この3つのコマンドを入力して実行
これでランダムな文字列を含んだバケットの名前を生成し、bucketNameという変数に格納された
次にパケット一覧を習得してみよう
「aws s3 ls」このコマンドを入力して実行したら
2022-04-19 14:13:24 mybucket-1e4cc8fead318eb4dd8fde9d と出てきたので
先程作成したバケットがリストにあることを確認できる
ためしにバケットにファイルをアップロードしてみよう
$ echo "Hello world!" > hello_world.txt
$ aws s3 cp hello_world.txt "s3://${bucketName}/hello_world.txt"
この2つを入力して実行、そしたら「upload: ./hello_world.txt to s3://mybucket-1e4cc8fead318eb4dd8fde9d/hello_world.txt」と出て無事アップロードできた
しっかりアップロードできたか試しに以下のコード
$ aws s3 ls "s3://${bucketName}" --human-readable
このコードを入力してパケットの中にあるファイルの一覧を習得してみる
実行したら「2022-04-19 14:21:12 13 Bytes hello_world.txt」と出てしっかり確認できた
最後に、使い終わったパケットを削除する
$ aws s3 rb "s3://${bucketName}" --force
と入力して実行
そしたら
「delete: s3://mybucket-1e4cc8fead318eb4dd8fde9d/hello_world.txt
remove_bucket: mybucket-1e4cc8fead318eb4dd8fde9d」と出てきて
無事削除