SFTPとは?
SFTP (Secure File Transfer Protocol) は、クライアントからサーバーにファイルを転送するためのネットワークプロトコルです。FTP (File Transfer Protocol) とは異なり、SFTP は SSH (Secure Shell) プロトコルを使用して送信するデータを暗号化します。1990年代にコンピュータ科学者のTatu YlönenとSami Lehtinenによって開発されたSSHプロトコルを採用しています。ただし、現代版はIETF(インターネット技術タスクフォース)によって開発されています。
その名前からファイル転送操作のみを行うように見えるが、リモートファイルシステムプロトコルと言える。SFTPを使用してクライアントから受信サーバーにファイルを送信する場合、データは送信先に送信される前に暗号化されます。送信中のデータが「中間者」によって傍受された場合、この第三者によって簡単に復号化されることはないのです。SSHとOpenSSHサーバーのインストール
SFTPサーバーを設定するために、SSHとOpenSSHサーバーをインストールするところから始めます。
ほとんどの Linux インストールでは、すでに SSH がデフォルトでインストールされていますが、システムにインストールされていない場合は、Advanced Packaging Tool の apt
コマンドでインストールすることができます。
sudo apt install ssh
SSH をインストールした後、ssh
コマンドを -V
フラグを付けて実行することで、そのバージョンを確認することができます。
ssh -V
Debian や Ubuntu システムに OpenSSH サーバをインストールするには、たとえば apt
コマンドを使用します。
sudo apt install openssh-server
Arch Linux では pacman
コマンドを使って同じことができます。
sudo pacman -S openssh
SFTP 用のユーザー、グループ、ディレクトリの作成
Linux では、異なるサービスはそれぞれ独自のユーザー、グループ、ディレクトリを使用することが一般的です。
まず、SFTPのユーザー用のグループを作成します。これは groupadd
コマンドを使用することで実現できます。
sudo groupadd sftp_group
ユーザーを作成し、 useradd
コマンドとその -g
フラグ(ユーザーが所属するグループを指定するフラグ)を使用して、作成したグループにそのユーザーを追加することができます。
sudo useradd -g sftp_group sftp_user
ユーザーを作成した後、passwd
コマンドを使用してパスワードを割り当てます。
sudo passwd sftp_user
新しく作成したユーザーのデフォルトディレクトリを作成します。
sudo mkdir -p /data/sftp_user/uploaded_files
chown` コマンドを使用して、このディレクトリに必要なパーミッションを与えます。
sudo chown -R root:sftp_group /data/sftp_user
sudo chown -R sftp_user:sftp_group /data/sftp_user/uploaded_files
SSH サーバーの設定
SFTPサーバーの設定の次のステップは、使用するSSHサーバーを設定することです。
etc/ssh/ にある sshd_config ファイルを編集し、SSH シェルではなく SFTP シェルを使用するようにします。 このファイルは、多くの Linux にデフォルトで入っている Nano エディタを使えば、簡単に編集することができます。sudo nano /etc/ssh/sshd_config
ファイルの一番下を探し、以下を追加します。
マッチグループ sftp_group
ChrootDirectory /data/%u
ForceCommand 内部-sftp
SSHサービスを再起動します。
sudo systemctl restart sshd
(オプション) SFTP ポートの変更
SFTP サーバーのポートをデフォルトの 22 から任意のものに変更したい場合は、“sshd_config” ファイルを再度編集する必要があります。
再度、Nanoエディタで編集してください。sudo nano /etc/ssh/sshd_config
デフォルトのポート値である 22 がコメントアウトされている行を探します。
#ポート 22
ハッシュ(#)記号を削除して、好きなポート値を追加してください。私の場合は、1111に変更しています。
ポート 1111
次に、ファイルを保存します。
を保存します。 を保存し、サーバを再起動します。sudo systemctl restart sshd
サーバのログインと使用
サーバがインストールされ、設定されたら、すぐに使えるようになります。SSH による暗号化されたセッションで、簡単にファイルをアップロードしたり、ダウンロードしたりすることができます。
ログインする前に、提供されているマニュアルを見ておいて損はないでしょう。sftp -h
ユーザ名とサーバのIPまたはホスト名を以下のフォーマットで入力して、サーバにログインしてください。
sftp USER@HOST
さらに、-P
フラグを使用して、SFTP サーバが使用するポート (デフォルトは 22) を指定することができます。
sftp USER@HOST -P です。
ログインすると、SFTPシェルが表示されます。
help` と入力するとマニュアルが表示されます。ファイルのダウンロード
ファイルをダウンロードするには、次のようにします。
get /path/to/file/on/server
例
get /bin/ls
これはカレントディレクトリ、つまりサーバーにログインする前にローカルにいたディレクトリにダウンロードします。特定のローカルディレクトリにダウンロードするには
get /path/to/file/on/server /path/to/local/folder
ディレクトリをコピーするには、コマンドに recursive を意味する -r
パラメータを追加する必要があります。
get -r /bin /home/username/Desktop/bin
。
この場合、「/home/username/Desktop/bin」のように、ローカルに作成する新しいディレクトリの名前を追加するのを忘れないでください。get -r /bin /home/username/Desktop`とすると、デスクトップ上に直接ファイルがコピーされます。コピーされるのはファイルであり、ディレクトリそのものではないことに注意してください。
ファイルのアップロード
ファイルやディレクトリのアップロードは、同じ原則に従います。唯一の例外は、パスが逆であることです。つまり、最初にローカルのファイル/ディレクトリを指定し、次にリモートのパスを指定します。
まず始めに、put
コマンドを使用してファイルをサーバーにアップロードします。
put /path/to/local/content /path/to/remote/location
ディレクトリをアップロードする場合(再帰的)、前のセクションと同じルールが適用されることを覚えておいてください:実際にコピーされるのはディレクトリ内のファイルであり、ディレクトリ自体ではありません。これらのファイルをコピーしたいディレクトリの新しい名前を指定します。
put -r /home/username/Desktop/bin ビン
これで、リモート側に “bin” という新しいディレクトリが作成されます。
転送の再開とスペースを含むパスの使用
大きなファイルの転送が中断された場合、前のコマンドを reput
と reget
に置き換えることで、転送を再開することができます。このとき、転送元と転送先のパスが完全に一致するように、前回と同じパスを使用することを確認してください。
reget /path/to/file/on/server/path/to/local/fileを指定してください。
reput /path/to/local/file /path/to/file/on/server
ディレクトリ転送を再開するには、-r
パラメータを追加するだけでよい。
reput -r /home/username/Desktop/bin bin
ファイルへのパスにスペースが含まれる場合は、引用符で囲んでください。
put "/home/username/My Documents/Files".
その他の使用法
ls` コマンドを使用すると、ファイルやディレクトリの一覧を表示することができます。
ls -l
ファイルのパーミッションは chmod
コマンドで変更することもできます。
chmod <パーミッション>
さらに、mkdirコマンドを使って新しいディレクトリを作成することができます。
mkdir (ディレクトリ名)
よくある質問
1. SFTPクライアントをインストールする必要がありますか?
ほとんどのLinuxシステムでは、ターミナルベースのSFTPクライアントがデフォルトでインストールされているので、ほとんどの場合、必要ありません。
2. 2.公開鍵認証は使えますか?
パスワードの代わりに公開鍵認証を使用することができます。設定は非常に簡単で、サーバーのセキュリティも強化されます。
3. 3. SSHサーバを同時にホストすることはできますか?
ただし、SFTPサーバーがSSHサーバーと同じポートを使用していないことを確認する必要があります。