LoginSignup
8
9

More than 5 years have passed since last update.

EC2にSFTPさせる

Last updated at Posted at 2018-04-13

外部の接続元から自分で管理しているEC2にSFTPしてもらう想定で書いていますが、もちろん自分で接続する用でも良いです。

SFTPとFTPSの違い

まず、両者は全く違います。
SFTPは基本はSSHだと思って頂ければいいです。SSHで接続してファイルの転送だけFTPを使う感じです。
FTPSはFTP+暗号化してSecureにします。HTTPにSが付くパターンと同じです。

サーバ側でやること

  • まず useradd コマンドで接続用のユーザを用意しましょう
  • 次に公開鍵認証用に ssh-keygen -t rsa で公開鍵と秘密鍵を作成します。デフォルトなら id_rsa.pubid_rsa が出来るので、秘密鍵である後者をSFTPさせたい相手に、圧縮してパスワードつけるなどして渡しましょう
  • 前者の公開鍵は、 /home/{useraddで追加したユーザ}/.ssh/authorized_keys という名前で配置しましょう
  • /home/{useraddで追加したユーザ}/.ssh ディレクトリのパーミッションは 700 にしましょう
  • authorized_keys のパーミッションは 600 にしましょう
  • 必須ではないですが、接続元のGIPなどをEC2のセキュリティーグループのインバウンド設定に入れると良いかと思います。仮に秘密鍵とこちらのホスト名(IP)が漏れても、接続を防げます

あとはお茶でも飲みながら「接続出来ました!」という返事を待つのみなのですが、なぜか繋がらない。。

よく出る permission denied のエラー。-vvv で詳細表示してもよく分かりません。
通常は上記の手順で繋がるのですが、実は接続ユーザのホームディレクトリを usermod -d で 変更している場合、修正が必要な箇所があります。
SSHの設定ファイル /etc/ssh/sshd_conf で、公開鍵のファイル名を設定している以下の箇所がありますが、

AuthorizedKeysFile     .ssh/authorized_keys

ログイン直後からの相対パスで設定されているため、ホームディレクトリを変更した場合は公開鍵が見つからずにエラーになります。(Not Foundとか出して欲しい)

なので

AuthorizedKeysFile     /home/%u/.ssh/authorized_keys

と絶対パスに書き換えて sudo service sshd restart で再起動する必要があります。

SFTPもSSHも基本同じなので例はSFTPでしたが、SSHでももちろん繋げます。
あと、サーバ側のエラー情報などは /var/log/secure に出たりします。今回の例では全く役に経ちませんでしたが。

8
9
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
8
9