ホーム テクノロジー LINUX 15 Linux での SFTP コマンドの例

15 Linux での SFTP コマンドの例


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を使用します。これは基本的にfile2file3をアップロードし、前のステップですでにアップロードされている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 セッションを終了するには、 byeexit またはquitコマンドのいずれかを使用します。 SFTP を終了すると、OS プロンプトに戻ります。

 sftp> exit
$

結論

SFTP は、安全かつ使いやすい、利用可能な最良のオプションの 1 つです。 CLI および GUI 機能を提供し、さまざまなプラットフォームでサポートされています。詳細については、 sftpマニュアル ページを参照してください。

 $ man sftp

さらに詳しく知りたい場合は、このUdemy Linux マスターコースをご覧ください。

「 15 Linux での SFTP コマンドの例」についてわかりやすく解説!絶対に観るべきベスト2動画

scpコマンドとFTPサーバによるファイル転送方法
【すぐできる!】誰でも簡単!Linux をコマンド操作してみよう! #1 パッケージ管理 #Linux #APT