SFTP (Secure File Transfer Protocol) は、ファイル転送プロトコル (FTP) に基づく安全なリモート ファイル転送ユーティリティです。
FTP トラフィックは暗号化されておらず安全ではないため、ほとんどが SFTP に置き換えられています。
SFTP は、デフォルトで TCP ポート 22 上の SSH プロトコル上で実行され、SSH と同じ一連のセキュリティおよび暗号化機能を提供します。 Linux システム上で OpenSSH サーバーの一部として実行されるデフォルトの SSH デーモンは、デフォルトで SFTP プロトコルの基本機能をサポートしますが、追加機能やカスタマイズを取得するように構成できる
vsftpd
などの個別の専用ソフトウェアが利用可能です。
この記事では、コマンド ラインからの SFTP の使用法について説明します。ここでは Ubuntu システムを使用しますが、ここにリストされているコマンドは
sftp
クライアントを備えたどの Linux システムでも動作します。
コマンドに入る前に、 SCP が非推奨になりつつあること を知っておく必要があり、その代替手段として SFTP コマンドについてよく理解しておくことをお勧めします。 SCP で行うこととほぼすべてのことを SFTP で行うことができます。
ファイルのコピー
SFTP は、サポートされている一部のユースケースで SCP (Secure Copy) コマンドの代わりとして使用できます。そのようなケースの 1 つは 、SCP を使用してリモート サーバーからファイルを一度にプッシュまたはプルする場合です。
SCP コマンドを使用して アップロードする ための構文は次のようになります。
$ scp {local-path} {user}@{remote-host}:{remote-path}
そして、次のように ダウンロードする 場合:
$ scp {user}@{remote-host}:{remote-file-path} {local-path}
同様に、次の
sftp
コマンド構文を使用してファイルをリモート サーバーにアップロードできます。
$ sftp {user}@{host}:{remote-path} <<< $'put {local-path}'
以下は、ワンライナーとして sftp を使用したファイルのアップロードを 示す 1 つのデモです。
$ sftp ftpuser@192.168.1.231:/home/ftpuser/remote_test_dir <<< $'put /home/abhisheknair/new_file'
ftpuser@192.168.1.231's password:
Connected to 192.168.1.231.
Changing to: /home/ftpuser/remote_test_dir
sftp> put /home/abhisheknair/new_file
Uploading /home/abhisheknair/new_file to /home/ftpuser/remote_test_dir/new_file
/home/abhisheknair/new_file 100% 9 7.2KB/s 00:00
$
リモート サーバーからファイル をダウンロードする には、次のコマンド構文を使用します。
$ sftp {user}@{remote-host}:{remote-file-name} {local-file-name}
以下は、sftp を使用してファイルを 1 行でダウンロードするデモです。
$ sftp ftpuser@192.168.1.231:/home/ftpuser/new_file1 /home/abhisheknair/new_local_dir
ftpuser@192.168.1.231's password:
Connected to 192.168.1.231.
Fetching /home/ftpuser/new_file1 to /home/abhisheknair/new_local_dir/new_file1
/home/ftpuser/new_file1 100% 12 3.6KB/s 00:00
$
パスワードなしの認証用に SSH キーを交換することもできます。
SFTPサーバーへの接続
SFTP 接続を開始するには、ユーザー名とリモート ホストの名前または IP を指定して
sftp
コマンドを使用します。これが機能するには、デフォルトの TCP ポート 22 が開いている必要があります。そうでない場合は、
-oPort
フラグを使用してポートを明示的に指定します。
IP
192.168.1.231
の SFTP サーバーに接続しています。初めて SFTP サーバーに接続するときは、SSH と同様にサーバーのフィンガープリントを確認するように求められます。 「
yes
」と入力して確認すると、接続が続行され、ユーザーのパスワードの入力を求められます。
接続に成功すると、
sftp>
プロンプトが表示されます。
$ sftp ftpuser@192.168.1.231
The authenticity of host '192.168.1.231 (192.168.1.231)' can't be established.
ECDSA key fingerprint is SHA256:k90E28Pfnjoiq1svFw18dA2mazweoCmR5Hqi8SH0mj0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.231' (ECDSA) to the list of known hosts.
ftpuser@192.168.1.231's password:
Connected to 192.168.1.231.
sftp>
バージョンの確認
SFTP のバージョンは、
sftp
プロンプトで
version
コマンドを使用して確認できます。
sftp> version
SFTP protocol version 3
sftp>
助けを求める
SFTP で使用可能なコマンドと構文に関するヘルプを表示するには、「 ?」 を使用します。 ‘ または ‘ ヘルプ ‘。
sftp> ?
Available commands:
bye Quit sftp
cd path Change remote directory to 'path'
chgrp [-h] grp path Change group of file 'path' to 'grp'
chmod [-h] mode path Change permissions of file 'path' to 'mode'
chown [-h] own path Change owner of file 'path' to 'own'
df [-hi] [path] Display statistics for current directory or
filesystem containing 'path'
exit Quit sftp
get [-afpR] remote [local] Download file
help Display this help text
lcd path Change local directory to 'path'
lls [ls-options [path]] Display local directory listing
lmkdir path Create local directory
ln [-s] oldpath newpath Link remote file (-s for symlink)
lpwd Print local working directory
ls [-1afhlnrSt] [path] Display remote directory listing
lumask umask Set local umask to 'umask'
mkdir path Create remote directory
progress Toggle display of progress meter
put [-afpR] local [remote] Upload file
pwd Display remote working directory
quit Quit sftp
reget [-fpR] remote [local] Resume download file
rename oldpath newpath Rename remote file
reput [-fpR] local [remote] Resume upload file
rm path Delete remote file
rmdir path Remove remote directory
symlink oldpath newpath Symlink remote file
version Show SFTP version
!command Execute 'command' in local shell
! Escape to local shell
? Synonym for help
sftp>
作業ディレクトリを表示
リモートサーバーに接続している場合、
pwd
コマンドを使用してリモートシステムの現在の作業ディレクトリを表示できます。
sftp> pwd
Remote working directory: /home/ftpuser
sftp>
ローカル システムの現在の作業ディレクトリを表示するには、
lpwd
コマンドを使用します。
sftp> lpwd
Local working directory: /home/abhisheknair
sftp>
ファイルをリストする
ls
コマンドを使用して、リモート作業ディレクトリ内のファイルを一覧表示できます。
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>
ローカル作業ディレクトリ内のファイルを一覧表示するには、
lls
コマンドを使用します。
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp>
ディレクトリの切り替え
リモート作業ディレクトリの切り替えは
cd
コマンドを使用して行うことができます。以下の例を参照してください。
sftp> pwd
Remote working directory: /home/ftpuser
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> cd remote_test_dir
sftp> pwd
Remote working directory: /home/ftpuser/remote_test_dir
sftp>
ローカル作業ディレクトリを切り替えるには、
lcd
コマンドを使用します。以下は、
lcd
の使用法を示す簡単な例です。
sftp> lpwd
Local working directory: /home/abhisheknair
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> lcd testdir
sftp> lpwd
Local working directory: /home/abhisheknair/testdir
sftp>
ファイルをアップロードする
単一のファイルをアップロードするには、
put
コマンドを使用します。
put
コマンドを使用してローカル
file1 を
リモート作業ディレクトリにアップロードする方法を見てください。リモート作業ディレクトリの内容を出力する
ls
コマンドを使用して確認できます。
sftp> pwd
Remote working directory: /home/ftpuser
sftp> lpwd
Local working directory: /home/abhisheknair
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> put file1
Uploading file1 to /home/ftpuser/file1
file1 100% 6 6.0KB/s 00:00
sftp> ls
file1 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>
複数のファイルを一度にアップロードするには、以下に示すように
mput
コマンドを使用します。正規表現パターン
file[23]
で
mput
を使用します。これは基本的に
file2
と
file3
をアップロードし、前のステップですでにアップロードされている
file1
をスキップします。
mput
では、任意のワイルドカードまたは正規表現を使用できます。
sftp> pwd
Remote working directory: /home/ftpuser
sftp> lpwd
Local working directory: /home/abhisheknair
sftp> ls
file1 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> mput file[23]
Uploading file2 to /home/ftpuser/file2
file2 100% 6 6.5KB/s 00:00
Uploading file3 to /home/ftpuser/file3
file3 100% 6 5.3KB/s 00:00
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>
ファイルをダウンロードする
SFTP を使用した単一ファイルは、
get
コマンドを使用してダウンロードできます。以下は、sftp を使用して
Remote_file4
をダウンロードした例です。
sftp> pwd
Remote working directory: /home/ftpuser/remote_test_dir
sftp> lpwd
Local working directory: /home/abhisheknair/testdir
sftp> ls
remote_file4
sftp> lls
file4
sftp> get remote_file4
Fetching /home/ftpuser/remote_test_dir/remote_file4 to remote_file4
/home/ftpuser/remote_test_dir/remote_file4 100% 13 5.2KB/s 00:00
sftp> lls
file4 remote_file4
sftp>
複数のファイルをダウンロードするには、
<strong>mget</strong>
コマンドを使用します。ここでは、リモート作業ディレクトリ内のパターン
remote_file*
に一致するすべてのファイルをローカル作業ディレクトリにダウンロードしています。最後に
<strong>lls</strong>
コマンドを使用して、ダウンロードしたファイルを確認します。
sftp> pwd
Remote working directory: /home/ftpuser
sftp> lpwd
Local working directory: /home/abhisheknair/testdir
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> lls
file4 remote_file4
sftp> mget remote_file*
Fetching /home/ftpuser/remote_file1 to remote_file1
/home/ftpuser/remote_file1 100% 12 5.9KB/s 00:00
Fetching /home/ftpuser/remote_file2 to remote_file2
/home/ftpuser/remote_file2 100% 13 5.8KB/s 00:00
Fetching /home/ftpuser/remote_file3 to remote_file3
/home/ftpuser/remote_file3 100% 13 7.3KB/s 00:00
sftp> lls
file4 remote_file1 remote_file2 remote_file3 remote_file4
sftp>
ディレクトリの作成
mkdir
コマンドを使用して、リモート サーバー上に新しいディレクトリを作成できます。
sftp> pwd
Remote working directory: /home/ftpuser
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> mkdir new_dir
sftp> ls
file1 file2 file3 new_dir remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>
同様に、sftp プロンプトからローカル システムの現在の作業ディレクトリに新しいディレクトリを作成する場合は、
lmkdir
コマンドを使用します。
sftp> lpwd
Local working directory: /home/abhisheknair
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> lmkdir new_local_dir
sftp> lls
bin file1 file2 file3 lib new_local_dir oci-scripts sys_info.sh test.tgz testdir
sftp>
ディレクトリの削除
空のリモート ディレクトリは、
rmdir
コマンドを使用して削除できます。空でない場合はエラーが発生することに注意してください。
sftp> pwd
Remote working directory: /home/ftpuser
sftp> ls
file1 file2 file3 new_dir remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> rmdir new_dir
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>
ファイルの削除
リモート ファイルは
rm
コマンドを使用して削除できます。
sftp> pwd
Remote working directory: /home/ftpuser
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> rm remote_file3
Removing /home/ftpuser/remote_file3
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_test_dir
sftp>
ファイルの名前を変更
リモート ファイルの名前は、
rename
コマンドを使用して簡単に変更することもできます。
sftp> pwd
Remote working directory: /home/ftpuser
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_test_dir
sftp> rename remote_file1 new_file1
sftp> ls
file1 file2 file3 new_file1 remote_file2 remote_test_dir
sftp>
ファイルシステムの使用状況
「path」を含む現在のディレクトリまたはファイルシステムの統計を表示するには、
df
コマンドを使用します。
-h
フラグを使用すると、人間が読める形式で統計を表示できます。表示される統計は、ローカル マシンのファイル システムではなく、リモート SFTP サーバーのそれぞれのファイル システムに関するものであることに注意してください。
sftp> df
Size Used Avail (root) %Capacity
17811456 1845472 15965984 15965984 10%
sftp> df -h
Size Used Avail (root) %Capacity
17.0GB 1.8GB 15.2GB 15.2GB 10%
sftp>
SFTPセッションを終了する
SFTP セッションを終了するには、
bye
、
exit
、
または
quit
コマンドのいずれかを使用します。 SFTP を終了すると、OS プロンプトに戻ります。
sftp> exit
$
結論
SFTP は、安全かつ使いやすい、利用可能な最良のオプションの 1 つです。 CLI および GUI 機能を提供し、さまざまなプラットフォームでサポートされています。詳細については、
sftp
マニュアル ページを参照してください。
$ man sftp
さらに詳しく知りたい場合は、この Udemy Linux マスターコース をご覧ください。