はじめに
railsアプリのインフラをAWS化させようと学習中。
教材に従ってssh接続(WEBサーバーからDBサーバーに)にする際に
linuxコマンドのscpが上手く使いこなせなかったので、メモに残す。
学習教材
・さわって学ぶクラウドインフラAmazonWebServices基礎からのネットワーク&サーバー構築改訂3版
ハマった章:6-4 踏み台サーバーを経由してSSHで接続する
やりたい事
DBサーバー(プライベートサブネット)へのssh接続を可能にするために
WEBサーバー(パブリックサブネット)
に秘密鍵を格納しておく
必要がある。
必要手順
1、前章(6-3)以前で作成された秘密鍵をscpコマンドを使用して、
WEBサーバーにコピーする。
2、コピーできたら、WEBサーバーにssh接続をして
ファイル権限を所有者が読み取りだけできるよう設定する。
3、WEBサーバーに置いている秘密鍵を使って
DBサーバーにssh接続する。
ハマった部分
上記の1で、scpコマンドの文法が曖昧なまま実行してしまい
思うように挙動せず、迷走してしまった。
1、いざscpコマンドでコピー
scpは、Secure Copyの略称という事で
具体的には、ssh通信でcpコマンドが使えるみたいです。
(ローカルからリモートに対象ファイルをコピーできる。
)
秘密鍵をコピーする際の文法としては、下記コードの通り、
・オプション(-i)を使用して認証させる秘密鍵ファイルを設定
・コピー元ファイルのパス
・コピー先のパス
の順番で記述したら良い。
% scp -i <認証させる秘密鍵ファイル> <コピー元ファイル> <コピー先>
今回は
・-iで認証させる秘密鍵ファイルと
・コピー元ファイル
が同一のため、
個人的にコードが読み解きにくかった…
% scp -i ~/.ssh/my-key.pem ~/.ssh/my-key.pem ec2-user@パブリックアドレス(DNSアドレス):~/
私はMacユーザーで、下記記事を参考に.sshディレクトリに
秘密鍵を格納していたので、パスは下記記述としている。
コピー先のパス指定で、EC2のパブリックアドレスの後に
:~/
としているのでEC2のルートディレクトリに格納される。
ダメな例
これは自分の例で、オプションiを書けば
コピー元の秘密鍵ファイルが読み取られる
かつ コピー元ファイルとして設定される
と誤認してしまっていた。
面倒ではあるけど、オプションiの認証ファイルは
別で指定してあげないといけないらしい。
% scp -i ~/.ssh/my-key.pem ec2-user@パブリックアドレス(DNSアドレス):~/
2、ファイル権限の変更
手順は以下の通り。
・WEBサーバー(パブリックサブネット)にssh接続する。
・ファイルがコピーできているか確認する。
・コピーできていれば、chmodで所有者だけ読取可能に変更する。
コードで表すと…
# EC2へssh接続
% ssh -i ~/.ssh/my-key.pem ec2-user@パブリックアドレス(DNSアドレス)
# EC2内でファイル確認
% ls
# 同ファイルの権限を変更
% chmod 400 my-key.pem
# 変更後のチェック
% ls -l
3、ファイル権限の変更
教材の通り、秘密鍵を使用して
EC2(パブリックサブネット)からDBサーバー(プライベートサブネット)にssh接続する。
% ssh -i my-key.pem ec2-user@10.0.2.10
その他の参考記事
終わりに
当問題の解決のために、ググったら
linuxコマンドの復習の機会にもなって良かった。
落ち着いて見直すと、ほぼ教材通りのコードで
お恥ずかしい。笑
最後までお読み頂き、ありがとうございました。