環境
- AWS
- EC2 Ubuntu 20.04.3 LTS
経緯
- ファイルを今すぐサクッとアップロードしたい(一部、除外したいファイルがある)
-
scp
だと、除外するのが面倒だ - よし、
rsync
を使ってしまおう
rsync -av my-special-app my-pretty-ec2:
とコマンドを実行するつもりが、勢い余って
rsync -av my-special-app/ my-pretty-ec2:
とコマンドを実行してしまう
- 「ローカルのフォルダ自体」を「EC2のディレクトリ」に同期してしまう
- (-aオプションを深く考えず付けてしまったので、可能な限りローカル側のファイルがリモートで再現される)
トラブル
- その後、
Permission denied (publickey)
になり、ssh
できなくなる
原因
- rsyncによって、ディレクトリの権限が書き換わってしまったから
- (焦りすぎて思考能力、状況把握能力が、ほぼゼロになり、.sshフォルダばかり疑ってしまう、解決まで少し時間がかかる)
- AWSナレッジページ(ページ最下部)に確認すべき項目が述べられていて、本当に助かった
対処方法
- AWSのManagement consoleから、[Actions] - [Connect] を選択する
- (Webブラウザでコマンドを実行できる、
ssh
できなくてもリモート操作できる) - 環境に応じて、アクセス権を修正(以下、コマンド例)
- AWSのページでは、
700
となっている
- AWSのページでは、
sudo chmod 755 /home/ubuntu
再発防止
- rsync時は--dry-run必須など
学び
- 急いでいると深く考えなくなる、慣れてくると自信過剰になる
- トラブルが発生して、焦っているときの思考は危険
- 物事を、もっと深く学び、急いでいても高品質な出力を実現する(そのために、アウトプットすることは有効な手段と考える)
参考にしたページ
Linux ホームディレクトリ (/home) であれば、(0755/drwxr-xr-x) にする必要があります。
ユーザーのホームディレクトリ (/home/ec2-user/) であれば、(0700/drwx------) にする必要があります。
.ssh ディレクトリのアクセス許可 (/home/ec2-user/.ssh) であれば、(0700/drwx------) にする必要があります。
authorized_keys ファイルのアクセス許可 (/home/ec2-user/.ssh/authorized_keys) であれば、(0600/-rw-------) にする必要があります。