0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

秘密鍵なしでEC2間のファイル転送をする備忘録(SCP + パスワード認証)

0
Posted at

はじめに

初めましての人も、そうでない人もこんにちは!

社会人になってから思った以上にLinux(Unix)を触る機会が増えて、毎日勉強の日々ですw

最近、個人開発の一環でAWS上の「同一アカウント / 同一VPC内」のEC2インスタンス同士でファイル転送を行う必要がありました。

そこで scp コマンドを使おうとしたのですが、少しハマったポイントがあったので、今回は備忘録も兼ねてまとめてみます!

SCPコマンドとは?

scp はSSHを利用してコンピュータ間でファイルを安全にコピーするコマンドです。

Linux環境ではかなりよく使われます!

基本的な構文はこちらです。

scp [オプション] [コピー元ファイル] [ユーザー名]@[接続先IPアドレス]:[保存先ディレクトリ]

例えば以下のように使います。

scp sample.txt ec2-user@192.168.1.10:/home/ec2-user/

この場合、

  • sample.txt
  • 接続先EC2の /home/ec2-user/

へ転送されます!

なお、接続先に同名ファイルが存在する場合は上書きされます。

よく使う -i オプション

SCPコマンドで特によく使うのが -i オプションです。

scp -i sample.pem sample.txt ec2-user@192.168.1.10:/home/ec2-user/

これはSSH接続時に使用する秘密鍵ファイルを指定するオプションですね!

今回の問題

ただ今回は問題がありました。

なんと秘密鍵ファイル(.pem)を消してしまいました…。

(皆さんは本当に気をつけてくださいw)

つまり、

  • -i オプションが使えない
  • 通常の公開鍵認証ができない

という状態です。

では、どうやってSCPでファイル転送を行うのでしょうか?

SCPを使うにはSSH接続が必要

SCPは内部的にSSHを利用しています。

つまり、SCPが成功するためには「SSH接続できる状態」である必要があります。

通常は公開鍵認証を使いますが、SSHにはもう1つ認証方法があります。

それが「パスワード認証」です!

パスワード認証を使う

今回はSSHのパスワード認証を利用して接続を行いました。

まずはSSH接続を試します。

ssh -l [ユーザー名]@[接続先IPアドレス]

例えばEC2ならこんな感じです。

ssh -l ec2-user@192.168.1.10

するとパスワード入力を求められるので、接続先に設定したパスワードを入力します。

認証が成功すればSSH接続完了です!

SSH接続できたらSCPで転送

SSH接続が成功するということは、SCPも利用可能になります。

実際には以下のように実行できます。

scp sample.txt ec2-user@192.168.1.10:/home/ec2-user/

するとパスワードを求められるので、SSH接続時と同じパスワードを入力します。

これでファイル転送完了です!

EC2でパスワード認証を使う時の注意点

EC2ではデフォルトでパスワード認証が無効になっていることがあります。

そのため、/etc/ssh/sshd_config を編集して設定を変更します。

PasswordAuthentication yes

また、rootユーザーのログイン設定も確認します。

PermitRootLogin yes

ただし、PermitRootLogin yes はセキュリティリスクが高くなるため、実運用では以下のような設定がよく使われます。

PermitRootLogin prohibit-password

これは「rootログインは許可するが、パスワード認証は禁止」という設定です。
つまり、秘密鍵認証のみでrootログイン可能になります。

さらに、より制限を強くしたい場合は以下もあります。

PermitRootLogin forced-commands-only

こちらは、SSHキーにコマンド制限が設定されている場合のみrootログインを許可する設定です。

バックアップ処理や自動化用途などで使われることがあります。

設定変更後はSSHサービスを再起動します。

sudo systemctl restart sshd

PasswordAuthentication を yes にしておく考え方

個人的には、普段は秘密鍵認証しか使わない場合でも、

PasswordAuthentication yes

にしておく運用もアリだと思っています。

理由としては、「このサーバはどの認証方式を使っているか」を外部から分かりにくくできるためです。

例えば PasswordAuthentication no にしていると、

  • 「このサーバは鍵認証だけを使っている」
  • 「パスワード認証は無効」

という情報を相手に与えることになります。

一方で yes にしておけば、接続方式をある程度ぼかすことができます。

もちろん、その分パスワード攻撃の対象になる可能性もあるため、

  • Security Groupで接続元IPを制限する
  • 強力なパスワードを設定する

といった対策は必要です。

まとめ

今回は秘密鍵ファイルがない状態で、EC2間のファイル転送を行う方法をまとめました!

ポイントとしては以下です。

  • SCPはSSHを利用している
  • -i が使えなくてもSSH接続できればSCPは使える
  • パスワード認証を利用すれば転送可能
  • PasswordAuthenticationPermitRootLogin の設定確認が必要
  • rootログイン設定は慎重に行う
  • セキュリティ設定には注意

個人的には「SCP = 鍵認証必須」だと思い込んでいたので勉強になりましたw

誰かの参考になれば嬉しいです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?