Linux で SFTP ログイン時に「Password authentication failed」エラーを解決する方法

LinuxLinuxBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

SFTP (Secure File Transfer Protocol、安全なファイル転送プロトコル) は、リモートシステム間でファイルを安全かつ信頼性高く転送するためのネットワークプロトコルです。これは Secure Shell (SSH) プロトコルの拡張であり、サーバやその他のネットワークデバイスへの安全なリモートアクセスに広く使用されています。このチュートリアルでは、SFTP の理解、認証方法の設定、および Linux 環境での SFTP 接続のセキュリティ強化のためのベストプラクティスの実装方法を説明します。

SFTP を使った安全なファイル転送の理解

SFTP (Secure File Transfer Protocol、安全なファイル転送プロトコル) は、リモートシステム間でファイルを安全かつ信頼性高く転送するためのネットワークプロトコルです。これは Secure Shell (SSH) プロトコルの拡張であり、サーバやその他のネットワークデバイスへの安全なリモートアクセスに広く使用されています。

SFTP は、FTP (File Transfer Protocol) や FTPS (FTP over SSL/TLS) などの従来のファイル転送プロトコルに比べていくつかの利点があります。SFTP の主な利点は、ファイル転送プロセス全体を暗号化するため、データが機密性を保ち、不正アクセスから保護されるという、本来的なセキュリティ性です。

SFTP の一般的な使用例の 1 つは、機密文書、財務データ、またはソフトウェア更新などのファイルをリモートロケーション間で安全に共有することです。また、システム管理者がリモートサーバ上のファイルを安全にアップロード、ダウンロード、および管理できるリモートシステム管理にも使用できます。

SFTP の使用方法を説明するために、ローカルマシンからリモートの Ubuntu 22.04 サーバにファイルを転送する必要があるシナリオを考えてみましょう。リモートサーバとの SSH 接続が確立されていると仮定すると、次のコマンドを使用して SFTP セッションを開始できます。

sftp user@remote_server

接続が確立されたら、次の SFTP コマンドを使用して、リモートファイルシステムを移動し、ファイルをアップロード、ダウンロード、および管理できます。

## 現在のディレクトリ内のファイルを一覧表示する
ls

## 別のディレクトリに移動する
cd /path/to/remote/directory

## ローカルからリモートにファイルをアップロードする
put local_file.txt

## リモートからローカルにファイルをダウンロードする
get remote_file.txt

## SFTP セッションを終了する
exit

これらの基本的な SFTP コマンドを使用すると、ローカルマシンとリモートサーバ間でファイルを安全に転送できます。SFTP プロトコルは、ファイル転送プロセスを暗号化するため、データが盗聴や不正アクセスから保護されます。

次のセクションでは、認証方法の設定や SFTP 接続のセキュリティ強化のためのベストプラクティスの実装など、より高度な SFTP 機能を探っていきます。

SFTP 認証方法の設定

SFTP は、リモートサーバへの安全なアクセスを確保するために、さまざまな認証方法をサポートしています。最も一般的な 2 つの認証方法は、パスワードベースの認証と公開鍵認証です。

パスワードベースの認証

パスワードベースの認証は最も簡単な方法で、ユーザーがユーザー名とパスワードを提供してリモートサーバに認証します。この方法は、小規模なデプロイメントや、SFTP を時折のファイル転送に使用する場合に適しています。パスワードベースの認証を設定するには、次のコマンドを使用できます。

sftp user@remote_server

プロンプトが表示されたら、正しいユーザー名とパスワードを入力して SFTP 接続を確立します。

公開鍵認証

公開鍵認証は、ネットワーク上でパスワードを共有する必要がないため、より安全で推奨される SFTP アクセス方法です。この方法では、公開鍵と秘密鍵のペアを生成し、リモートサーバを設定して公開鍵を認証に使用するようにします。

Ubuntu 22.04 システムで公開鍵認証を設定するには、次の手順に従います。

  1. ssh-keygen コマンドを使用して公開鍵と秘密鍵のペアを生成します。
ssh-keygen -t rsa -b 4096 -C "[email protected]"
  1. 生成された公開鍵(通常は ~/.ssh/id_rsa.pub にあります)をリモートサーバの承認済みキーファイル(通常は ~/.ssh/authorized_keys)にコピーします。

  2. SSH デーモンの設定ファイル (/etc/ssh/sshd_config) を編集し、次の設定が有効になっていることを確認して、リモートサーバが公開鍵認証を使用するように設定します。

PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys
  1. 変更を適用するために SSH デーモンを再起動します。
sudo systemctl restart sshd

これで、SFTP を使用してリモートサーバに接続するときは、次のコマンドを使用して秘密鍵で認証できます。

sftp -i ~/.ssh/id_rsa user@remote_server

公開鍵認証方法は、特に複数のユーザーやサーバーが存在する環境では、個々のパスワードを管理および共有する必要がないため、より安全で拡張性の高いソリューションを提供します。

SFTP 接続のセキュリティ強化のためのベストプラクティス

SFTP 接続のセキュリティを確保するためには、ベストプラクティスを実施することが重要です。以下にいくつかの重要な推奨事項を示します。

強力な暗号化を適用する

SFTP は本来、ファイル転送プロセスに暗号化を提供しますが、強力な暗号化アルゴリズムを適用することでさらにセキュリティを強化できます。SSH デーモンの設定ファイル (/etc/ssh/sshd_config) で、次の設定を指定できます。

Ciphers aes256-ctr,aes192-ctr,aes128-ctr
MACs [email protected],[email protected],[email protected]

これらの設定により、SFTP 接続で利用可能な最も安全な暗号化およびメッセージ認証アルゴリズムが使用されることが保証されます。

ファイアウォールでアクセスを制限する

ファイアウォールルールを実装することで、SFTP サーバへのアクセスを制御および制限できます。Ubuntu 22.04 システムでは、ufw (Uncomplicated Firewall) ツールを使用して、必要なポートでの SFTP トラフィックのみを許可するファイアウォールルールを作成できます。例えば:

sudo ufw allow 22/tcp  ## SSH/SFTP トラフィックを許可する
sudo ufw enable

ファイルパーミッションを慎重に管理する

SFTP サーバ上のファイルパーミッションを適切に設定して、不正アクセスや変更を防止するようにしてください。chmod コマンドを使用して、SFTP を通じてアクセス可能なファイルやディレクトリに正しいパーミッションを設定します。

ロギングと監視を有効にする

SFTP サーバの包括的なロギングを有効にして、ユーザーの活動を監視および監査します。SSH デーモンを設定して、システムログファイルに SFTP 関連のイベントを記録することができ、これはトラブルシューティングやセキュリティ分析に役立ちます。

これらのベストプラクティスを実施することで、SFTP 接続のセキュリティを大幅に強化し、ファイル転送中の機密データを保護することができます。

まとめ

このチュートリアルでは、ローカルマシンとリモートの Linux サーバ間で SFTP を使用して安全にファイルを転送する方法を学びました。また、暗号化による本来的なセキュリティなど、SFTP が従来のファイル転送プロトコルに比べて持つ利点を探りました。さらに、SFTP の認証方法を設定する方法や、SFTP 接続のセキュリティを強化するためのベストプラクティスを実装する方法を学び、ファイル転送プロセス中のデータの機密性と完全性を確保しました。SFTP を習得することで、Linux ベースの環境におけるリモートファイル管理と共有のワークフローのセキュリティを強化することができます。