WEBを探してみたが解決した情報が載っていなかったのでメモ。
同じエラーでハマっている人のヒントになれば幸い。
インスタンスの作成とセキュリティグループの選択
AWSのEC2インスタンスの作成でredhatを選択。
登録の途中でセキュリティグループの設定があるので21と60001-60010を空けておく。
具体的には
タイプ : カスタムTCP
プロトコル : TCP
ポート範囲 : 21
ソース : カスタム 0.0.0.0/0
タイプ : カスタムTCP
プロトコル : TCP
ポート範囲 : 60001-60010
ソース : カスタム 0.0.0.0/0
ちなみにこの設定は作成し終わった後からでも可能。
ElasticIPの登録
新しいアドレスの割り当てをクリックしてアドレスを発行。
発行したアドレスを選択して先ほど作ったインスタンスに紐づける。
具体的には
アドレスの横のチェックボックス>アクション>アドレスの関連付け
リソースタイプ : インスタンス
インスタンス : 先ほど作ったインスタンス
プライベートIP : プルダウンに1つしか出てこないはずなのでそれを選択
SSHで接続
インスタンス一覧画面から該当インスタンスをチェックした後[接続]をクリックすると
具体的な接続方法の説明が出てくる。
ここではwinSCPで接続してみる。
セッション
ホスト名 : (インスタンスのパブリックDNS) ec2-***-***-***-***.us-east-2.compute.amazonaws.com
ポート番号 : 22
ユーザ名 : ec2-user
設定
認証 > 秘密鍵(EC2生成時に発行したpemファイルを選択するとppkファイルに変換してくれる)
winSCPとputtyの連携設定が終わっているならばログイン後画面のアイコンからコンソール画面が開く
接続後は
$ sudo su -
でルートになっておく
FTPで接続するユーザー作成
# useradd tanaka # passwd tanaka
vsftpdインストール
yumでインストール
# yum -y install vsftpd
次に設定ファイルの編集。
# vi /etc/vsftpd/vsftpd.conf
デフォルトの設定値
anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES
失敗例
WEBで検索した結果をあまり何も考えず設定した。ここでハマる。
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=NO xferlog_enable=YES connect_from_port_20=NO xferlog_file=/var/log/vsftpd.log xferlog_std_format=NO ascii_upload_enable=YES ascii_download_enable=YES ls_recurse_enable=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES pasv_enable=YES pasv_addr_resolve=YES pasv_address=(ElasticIPで登録したIPアドレス) pasv_min_port=60001 pasv_max_port=60010 use_localtime=YES force_dot_files=YES seccomp_sandbox=NO allow_writeable_chroot=YES ## 以下はお好みで chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list userlist_deny=NO userlist_enable=YES userlist_file=/etc/vsftpd/user_list user_config_dir=/etc/vsftpd/user_conf
設定が終わったらvsftpd起動。
# systemctl start vsftpd.service
再起動時にONになるように設定。
# systemctl enable vsftpd.service
FTPで接続してみる(失敗)
まずwinSCPで接続してみた。
転送プロトコル : FTP
暗号化 : 暗号化なし
ホスト名 : (インスタンスのパブリックDNS) ec2-***-***-***-***.us-east-2.compute.amazonaws.com
ポート番号 : 22
ユーザ名 : ec2-user
するとエラー
ディレクトリ '/home/tanaka' のリスト取得エラー 転送チャンネルが開けません。原因:要求したアドレスのコンテキストが無効です。 ディレクトリの一覧を取得できません。
なおログインして接続は成功している模様。
winSCPじゃ原因がよく分からなかったのでローカルのマシンのコンソールからftpで接続してみる。
$ ftp ec2-***-***-***-***.us-east-2.compute.amazonaws.com Connected to ec2-***-***-***-***.us-east-2.compute.amazonaws.com (***.***.***.***). 220 (vsFTPd 3.0.2) Name (ec2-***-***-***-***.us-east-2.compute.amazonaws.com:root): tanaka 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (0,0,0,0,234,102). ftp: connect: 接続を拒否されました ftp> ls 227 Entering Passive Mode (0,0,0,0,234,100). ftp: connect: 接続を拒否されました ftp> ls 227 Entering Passive Mode (0,0,0,0,234,100). ftp: connect: 接続を拒否されました ftp>
なんかパッシブモードで接続しようとして失敗している?
括弧の中身が何を指すのかは調べてないが察するに
初めの4つはIPアドレス、後の2つはポートではないだろうか?
(234, 100 は10進数に直すと60000ぐらいになる)
てことはIPが0.0.0.0になってるってこと??
ログインできているってことはAWS側の設定やvsftpd.confのログイン回りの設定値はきっと正しい。
パッシブ関連が怪しい。
winSCPで失敗したときはセキュリティグループでポートが空いていないのかとも思ったが
0.0.0.0にアクセスしちゃってるっぽいのでポートの問題ではなさそう。
pasv_***あたりが怪しいのでそこを重点的に色々やってみるも解決せず。。。
FTPで接続してみる(成功)
結論。vsftpd.confの設定を以下に変更してrestartかけたら動いた。
listen=YES ipv6listen=NO
冷静に考えてみればそりゃそうか思えるがなかなか気が付けなかった。悔しい。
つまり動作確認済み設定値は
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=NO xferlog_enable=YES connect_from_port_20=NO xferlog_file=/var/log/vsftpd.log xferlog_std_format=NO ascii_upload_enable=YES ascii_download_enable=YES ls_recurse_enable=YES listen=YES listen_ipv6=NO pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES pasv_enable=YES pasv_addr_resolve=YES pasv_address=(ElasticIPで登録したIPアドレス) pasv_min_port=60001 pasv_max_port=60010 use_localtime=YES force_dot_files=YES seccomp_sandbox=NO allow_writeable_chroot=YES ## 以下はお好みで chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list userlist_deny=NO userlist_enable=YES userlist_file=/etc/vsftpd/user_list user_config_dir=/etc/vsftpd/user_conf
コメント