Linuxサーバーとの間でファイルを転送する必要がある場合、ほとんどの人はFileZilla、WinSCPまたは他のFTPプログラムのようなユーティリティを好む。SFTPは、オリジナルのFTPプロトコルの安全な代替品です。SFTPは、安全でないFTPプロトコルとほとんど同じ機能を果たしますが、暗号化のレイヤーを追加しています。このため、SSHプロトコルを使用し、暗号化機能を提供しています。LinuxシステムでSFTPサーバーをセットアップするには、複数のステップが必要です。

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” という新しいディレクトリが作成されます。

転送の再開とスペースを含むパスの使用

大きなファイルの転送が中断された場合、前のコマンドを reputreget に置き換えることで、転送を再開することができます。このとき、転送元と転送先のパスが完全に一致するように、前回と同じパスを使用することを確認してください。

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サーバーと同じポートを使用していないことを確認する必要があります。

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。