序章
FTP、ファイル転送プロトコルは、2つのリモートシステム間でファイルを転送するための一般的な暗号化されていない方法でした。 2022年の時点で、セキュリティが不足しているため、ほとんどの最新のソフトウェアでは廃止されており、ほとんどの場合、レガシーアプリケーションでのみ使用できます。
Secure File Transfer Protocolの略であるSFTPは、SSHに組み込まれた別個のプロトコルであり、安全な接続を介してFTPコマンドを実装できます。 通常、FTPサーバーがまだ必要な状況では、ドロップインの代替として機能します。
ほとんどすべての場合、SFTPは、その基盤となるセキュリティ機能とSSH接続にピギーバックする機能があるため、FTPよりも推奨されます。 FTPは安全でないプロトコルであり、限られた場合または信頼できるネットワークでのみ使用する必要があります。
SFTPは多くのグラフィカルツールに統合されていますが、このガイドでは、インタラクティブなコマンドラインインターフェイスを介してSFTPを使用する方法を示します。
SFTPに接続する方法
デフォルトでは、SFTPはSSHプロトコルを使用して、安全な接続を認証および確立します。 このため、SSHに存在するのと同じ認証方法を使用できます。
デフォルトではパスワードで認証できますが、SSHキーを作成し、アクセスする必要のあるシステムに公開キーを転送することをお勧めします。 これははるかに安全であり、長期的には時間を節約できます。
まだ行っていない場合は、サーバーにアクセスするためのSSHキーの設定に関するこのガイドを参照してください。
SSHを使用してマシンに接続できる場合は、SFTPを使用してファイルを管理するために必要なすべての要件を完了しています。 次のコマンドを使用してSSHアクセスをテストします。
ssh sammy@your_server_ip_or_remote_hostname
それが機能する場合は、次のように入力して終了します。
exit
これで、次のコマンドを発行してSFTPセッションを確立できます。
sftp sammy@your_server_ip_or_remote_hostname
リモートシステムに接続すると、プロンプトがSFTPプロンプトに変わります。
カスタムSSHポート(デフォルトのポート22ではない)で作業している場合は、次のようにSFTPセッションを開くことができます。
sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname
これにより、指定したポートを介してリモートシステムに接続されます。
SFTPでヘルプを取得する
最初に学ぶのに最も役立つコマンドは、ヘルプコマンドです。 これにより、他のSFTPコマンドの要約にアクセスできます。 プロンプトに次のいずれかを入力して呼び出すことができます。
help
また
?
これにより、使用可能なコマンドのリストが表示されます。
OutputAvailable commands: bye Quit sftp cd path Change remote directory to 'path' chgrp grp path Change group of file 'path' to 'grp' chmod mode path Change permissions of file 'path' to 'mode' chown 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 [-Ppr] remote [local] Download file help Display this help text lcd path Change local directory to 'path' . . .
次のセクションで表示されるコマンドのいくつかについて説明します。
SFTPでのナビゲート
対応するシェルと同様に機能するいくつかのコマンドを使用して、リモートシステムのファイル階層をナビゲートできます。
まず、現在リモートシステム上にあるディレクトリを見つけて、向きを変えましょう。 通常のシェルセッションと同様に、次のように入力して現在のディレクトリを取得できます。
pwd
OutputRemote working directory: /home/demouser
別の使い慣れたコマンドを使用して、リモートシステムの現在のディレクトリの内容を表示できます。
ls
OutputSummary.txt info.html temp.txt testDirectory
SFTPインターフェイス内で使用可能なコマンドは、一般的なシェル構文と1:1で一致するわけではなく、機能が豊富ではないことに注意してください。 ただし、-la
をls
に追加して、より多くのファイルメタデータとアクセス許可を表示するなど、より重要なオプションのフラグのいくつかを実装しています。
ls -la
Outputdrwxr-xr-x 5 demouser demouser 4096 Aug 13 15:11 . drwxr-xr-x 3 root root 4096 Aug 13 15:02 .. -rw------- 1 demouser demouser 5 Aug 13 15:04 .bash_history -rw-r--r-- 1 demouser demouser 220 Aug 13 15:02 .bash_logout -rw-r--r-- 1 demouser demouser 3486 Aug 13 15:02 .bashrc drwx------ 2 demouser demouser 4096 Aug 13 15:04 .cache -rw-r--r-- 1 demouser demouser 675 Aug 13 15:02 .profile . . .
別のディレクトリに移動するには、次のコマンドを発行できます。
cd testDirectory
これでリモートファイルシステムをトラバースできますが、ローカルファイルシステムにアクセスする必要がある場合はどうなりますか? ローカルの場合はl
を前に付けることで、コマンドをローカルファイルシステムに向けることができます。
これまでに説明したすべてのコマンドには、ローカルで同等のものがあります。 ローカルの作業ディレクトリを印刷できます。
lpwd
OutputLocal working directory: /Users/demouser
ローカルマシン上の現在のディレクトリの内容を一覧表示できます。
lls
OutputDesktop local.txt test.html Documents analysis.rtf zebra.html
ローカルシステムで対話するディレクトリを変更することもできます。
lcd Desktop
SFTPを使用したファイルの転送
リモートホストからファイルをダウンロードする場合は、get
コマンドを使用してダウンロードできます。
get remoteFile
OutputFetching /home/demouser/remoteFile to remoteFile /home/demouser/remoteFile 100% 37KB 36.8KB/s 00:01
ご覧のとおり、デフォルトでは、get
コマンドは、リモートファイルをローカルファイルシステム上の同じ名前のファイルにダウンロードします。
後で名前を指定することで、リモートファイルを別の名前にコピーできます。
get remoteFile localFile
get
コマンドは、いくつかのオプションフラグも受け入れます。 たとえば、再帰オプションを指定することで、ディレクトリとそのすべてのコンテンツをコピーできます。
get -r someDirectory
-P
または-p
フラグを使用して、適切なアクセス許可とアクセス時間を維持するようにSFTPに指示できます。
get -Pr someDirectory
ローカルファイルをリモートシステムに転送する
リモートシステムへのファイル転送も同じように機能しますが、put
コマンドを使用します。
put localFile
OutputUploading localFile to /home/demouser/localFile localFile 100% 7607 7.4KB/s 00:00
get
で機能するのと同じフラグがput
に適用されます。 したがって、ローカルディレクトリ全体をコピーするには、put -r
を実行できます。
put -r localDirectory
ファイルのダウンロードとアップロードに役立つ使い慣れたツールの1つは、df
コマンドです。これは、コマンドラインバージョンと同様に機能します。 これを使用して、関心のある転送を完了するのに十分なスペースがあることを確認できます。
df -h
Output Size Used Avail (root) %Capacity 19.9GB 1016MB 17.9GB 18.9GB 4%
このコマンドのローカルバリエーションはありませんが、!
コマンドを発行することで回避できることに注意してください。
!
コマンドは、ローカルシェルにドロップします。ここで、ローカルシステムで使用可能な任意のコマンドを実行できます。 次のように入力して、ディスク使用量を確認できます。
!
その後
df -h
OutputFilesystem Size Used Avail Capacity Mounted on /dev/disk0s2 595Gi 52Gi 544Gi 9% / devfs 181Ki 181Ki 0Bi 100% /dev map -hosts 0Bi 0Bi 0Bi 100% /net map auto_home 0Bi 0Bi 0Bi 100% /home
その他のローカルコマンドは期待どおりに機能します。 SFTPセッションに戻るには、次のように入力します。
exit
これで、SFTPプロンプトが返されるはずです。
SFTPを使用した簡単なファイル操作
SFTPを使用すると、ある種のファイルシステムのハウスキーピングを実行できます。 たとえば、リモートシステム上のファイルの所有者を次のように変更できます。
chown userID file
システムのchmod
コマンドとは異なり、SFTPコマンドはユーザー名を受け入れず、代わりにUIDを使用することに注意してください。 残念ながら、SFTPインターフェイス内から適切なUIDを知る組み込みの方法はありません。
回避策として、/etc/passwd
ファイルから読み取ることができます。このファイルは、ほとんどのLinux環境でユーザー名をUIDに関連付けます。
get /etc/passwd !less passwd
Outputroot:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh . . .
!
コマンドを単独で指定する代わりに、ローカルシェルコマンドのプレフィックスとして使用したことに注目してください。 これは、ローカルマシンで使用可能な任意のコマンドを実行するために機能し、以前はローカルのdf
コマンドで使用できた可能性があります。
UIDは、コロン文字で示されているように、ファイルの3番目の列にあります。
同様に、ファイルのグループ所有者を次のように変更できます。
chgrp groupID file
繰り返しますが、リモートシステムのグループのリストを取得するための組み込みの方法はありません。 次のコマンドで回避できます。
get /etc/group !less group
Outputroot:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: lp:x:7: . . .
3番目の列は、最初の列の名前に関連付けられたグループのIDを保持します。 これが私たちが探しているものです。
chmod
SFTPコマンドは、リモートファイルシステムでは通常どおり機能します。
chmod 777 publicFile
OutputChanging mode on /home/demouser/publicFile
ローカルファイルのアクセス許可を操作するための同等のコマンドはありませんが、ローカル umask を設定して、ローカルシステムにコピーされたすべてのファイルが対応するアクセス許可を持つようにすることができます。
これは、lumask
コマンドで実行できます。
lumask 022
OutputLocal umask: 022
これで、ダウンロードされたすべての通常のファイル(-p
フラグが使用されていない限り)に644のアクセス許可が付与されます。
SFTPでは、ローカルシステムとリモートシステムの両方で、それぞれlmkdir
とmkdir
を使用してディレクトリを作成することもできます。
残りのファイルコマンドは、リモートファイルシステムのみを対象としています。
ln rm rmdir
これらのコマンドは、同等のシェルのコア動作を複製します。 ローカルファイルシステムでこれらのアクションを実行する必要がある場合は、次のコマンドを発行してシェルにドロップできることに注意してください。
!
または、次のようにコマンドの前に!
を付けて、ローカルシステムで単一のコマンドを実行します。
!chmod 644 somefile
SFTPセッションが終了したら、exit
またはbye
を使用して接続を閉じます。
bye
結論
SFTP構文は、最新のシェルツールよりもはるかに包括的ではありませんが、従来のFTP構文との互換性を提供したり、一部の環境のリモートユーザーが利用できる機能を慎重に制限したりする場合に役立ちます。
たとえば、SFTPを使用して、特定のユーザーがSSHアクセスなしでファイルを転送できるようにすることができます。 このプロセスの詳細については、シェルアクセスなしでSFTPを有効にする方法のチュートリアルを確認してください。
FTPまたはSCPを使用して転送を実行することに慣れている場合、SFTPは両方の長所を活用するための優れた方法です。 すべての状況に適しているわけではありませんが、レパートリーに含めることのできる柔軟なツールです。