外部の接続元から自分で管理しているEC2にSFTPしてもらう想定で書いていますが、もちろん自分で接続する用でも良いです。
SFTPとFTPSの違い
まず、両者は全く違います。
SFTPは基本はSSHだと思って頂ければいいです。SSHで接続してファイルの転送だけFTPを使う感じです。
FTPSはFTP+暗号化してSecureにします。HTTPにSが付くパターンと同じです。
サーバ側でやること
- まず
useradd
コマンドで接続用のユーザを用意しましょう - 次に公開鍵認証用に
ssh-keygen -t rsa
で公開鍵と秘密鍵を作成します。デフォルトなら id_rsa.pub と id_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
に出たりします。今回の例では全く役に経ちませんでしたが。