外部の接続元から自分で管理している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 に出たりします。今回の例では全く役に経ちませんでしたが。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.