Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスにセキュア File Transfer プロトコル (SFTP) 接続を通じて接続できません。または、「remote raddir Permission denied」というエラーが表示されます。
解決策
SFTP 接続を通じて EC2 インスタンスに接続できない理由は複数あります。接続をトラブルシューティングするには、次の手順を実行してください。
インスタンスが SSH 接続の前提条件を満たしていることを確認する
SFTP は SSH 上で動作します。インスタンスがすべての SSH 接続の前提条件を満たしていることを確認します。前提条件のリストについては、「SSH を使用して Linux または macOS から Linux インスタンスに接続する」を参照してください。
詳細メッセージをオンにしてインスタンスにログインし、エラーを特定します。
次の一般的な接続エラーのいずれかが表示される場合があります。
- Connection timed out または Connection refused
- Permission denied または Authentication failed
- Server refused our key
詳細メッセージと SSH エラーの解決方法の詳細については、「SSH を使用して Amazon EC2 Linux インスタンスに接続する際のトラブルシューティングを行うにはどうすればよいですか?」を参照してください。
EC2 シリアルコンソールを有効にすると、それを使用してサポートされている Nitro ベースのインスタンスタイプをトラブルシューティングすることができます。シリアルコンソールは、起動の問題、ネットワーク設定、SSH 設定の問題のトラブルシューティングに役立ちます。シリアルコンソールは、ネットワーク接続が機能していなくてもインスタンスに接続します。Amazon EC2 コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を通じてシリアルコンソールにアクセスできます。
シリアルコンソールを使用する前に、アカウントレベルでシリアルコンソールへのアクセスを許可する必要があります。次に、IAM ユーザーにアクセス権を付与する AWS Identity and Access Management (IAM) ポリシーを作成します。シリアルコンソールを使用するすべてのインスタンスには、パスワードベースのユーザーが少なくとも 1 人含まれている必要があります。詳細については、「EC2 シリアルコンソールへのアクセス権を設定する」を参照してください。
注: AWS CLI コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください。
認証ログとシステムログにエラーがないか確認します
Amazon Linux、Amazon Linux2、RHEL、Fedora の認証ログ
$ sudo less /var/log/secure
Amazon Linux、Amazon Linux2、RHEL、Fedora の汎用システムログ
$ sudo less /var/log/messages
Debian と Ubuntu の認証ログ
$ sudo less /var/log/auth.log
Debian と Ubuntu の汎用システムログ
$ sudo less /var/log/syslog
Amazon Linux 2023
sshd ログを確認してください。
journalctl -u sshd
汎用システムログを確認してください。
journalctl -a
SSHD 設定ファイルに SFTP 用サブシステムが設定されていることを確認します。
SSHD 設定ファイルに SFTP のサブシステムが設定されていることと、sftp-server の共有オブジェクトファイルがそれぞれのディレクトリに存在することを確認します。SFTP サブシステムがないために SFTP 接続が終了した場合、ログには「subsystem request failed on channel 0」というエラーが表示されることがあります。
RHEL および Fedora ベースのディストリビューション
$ sudo grep Subsystem /etc/ssh/sshd_config
Subsystem sftp /usr/libexec/openssh/sftp-server
$ sudo ls -l /usr/libexec/openssh/sftp-server
-rwxr-xr-x. 1 root root 100784 Jun 26 2019 /usr/libexec/openssh/sftp-server
Debian および Ubuntu ベースのディストリビューション
$ sudo grep Subsystem /etc/ssh/sshd_config
Subsystem sftp /usr/lib/openssh/sftp-server
$ sudo ls -l /usr/lib/openssh/sftp-server
-rwxr-xr-x 1 root root 105608 Mar 4 2019 /usr/lib/openssh/sftp-server
詳細については、Linux マニュアルページの sshd\ _config のサブシステムセクションを参照してください。
リモート readdir の権限拒否エラーを解決する
「remote readdir Permission denied」というエラーは、ユーザーが SFTP に接続するための適切な権限を持っていないことを示しています。ターゲットディレクトリに切り替えるには、ユーザーには少なくとも読み取り権限と実行権限が必要です。
ユーザーがターゲットディレクトリにアクセスする権限を持っていることを確認します。
ls -ldZ /directory
ユーザーアクセスを制限するアクセスコントロールリスト (ACL) 権限を確認してください。
getfacl /directory
SELinux をアクティベートしたことを確認します。
getenforce
SELinux をアクティベートした場合は、/var/log/audit/audit.log または /var/log/audit.log を調べて、SELinux コンテキストに基づくパーミッション拒否エラーがないか確認してください。