序章

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アクセスをテストします。

  1. ssh sammy@your_server_ip_or_remote_hostname

それが機能する場合は、次のように入力して終了します。

  1. exit

これで、次のコマンドを発行してSFTPセッションを確立できます。

  1. sftp sammy@your_server_ip_or_remote_hostname

リモートシステムに接続すると、プロンプトがSFTPプロンプトに変わります。

カスタムSSHポート(デフォルトのポート22ではない)で作業している場合は、次のようにSFTPセッションを開くことができます。

  1. sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname

これにより、指定したポートを介してリモートシステムに接続されます。

SFTPでヘルプを取得する

最初に学ぶのに最も役立つコマンドは、ヘルプコマンドです。 これにより、他のSFTPコマンドの要約にアクセスできます。 プロンプトに次のいずれかを入力して呼び出すことができます。

  1. help

また

  1. ?

これにより、使用可能なコマンドのリストが表示されます。

Output
Available 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' . . .

次のセクションで表示されるコマンドのいくつかについて説明します。

対応するシェルと同様に機能するいくつかのコマンドを使用して、リモートシステムのファイル階層をナビゲートできます。

まず、現在リモートシステム上にあるディレクトリを見つけて、向きを変えましょう。 通常のシェルセッションと同様に、次のように入力して現在のディレクトリを取得できます。

  1. pwd
Output
Remote working directory: /home/demouser

別の使い慣れたコマンドを使用して、リモートシステムの現在のディレクトリの内容を表示できます。

  1. ls
Output
Summary.txt info.html temp.txt testDirectory

SFTPインターフェイス内で使用可能なコマンドは、一般的なシェル構文と1:1で一致するわけではなく、機能が豊富ではないことに注意してください。 ただし、追加など、より重要なオプションのフラグのいくつかは実装されています。 -lals より多くのファイルメタデータと権限を表示するには:

  1. ls -la
Output
drwxr-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 . . .

別のディレクトリに移動するには、次のコマンドを発行できます。

  1. cd testDirectory

これでリモートファイルシステムをトラバースできますが、ローカルファイルシステムにアクセスする必要がある場合はどうなりますか? コマンドの前にコマンドを置くことで、コマンドをローカルファイルシステムに向けることができます。 l ローカル用。

これまでに説明したすべてのコマンドには、ローカルで同等のものがあります。 ローカルの作業ディレクトリを印刷できます。

  1. lpwd
Output
Local working directory: /Users/demouser

ローカルマシン上の現在のディレクトリの内容を一覧表示できます。

  1. lls
Output
Desktop local.txt test.html Documents analysis.rtf zebra.html

ローカルシステムで対話するディレクトリを変更することもできます。

  1. lcd Desktop

SFTPを使用したファイルの転送

リモートホストからファイルをダウンロードする場合は、 get 指図:

  1. get remoteFile
Output
Fetching /home/demouser/remoteFile to remoteFile /home/demouser/remoteFile 100% 37KB 36.8KB/s 00:01

ご覧のとおり、デフォルトでは、 get コマンドは、リモートファイルをローカルファイルシステム上の同じ名前のファイルにダウンロードします。

後で名前を指定することで、リモートファイルを別の名前にコピーできます。

  1. get remoteFile localFile

The get コマンドは、いくつかのオプションフラグも受け入れます。 たとえば、再帰オプションを指定することで、ディレクトリとそのすべてのコンテンツをコピーできます。

  1. get -r someDirectory

を使用して、適切なアクセス許可とアクセス時間を維持するようにSFTPに指示できます。 -P また -p 国旗:

  1. get -Pr someDirectory

ローカルファイルをリモートシステムに転送する

リモートシステムへのファイル転送も同じように機能しますが、 put 指図:

  1. put localFile
Output
Uploading localFile to /home/demouser/localFile localFile 100% 7607 7.4KB/s 00:00

で動作するのと同じフラグ get に適用 put. したがって、ローカルディレクトリ全体をコピーするには、次のコマンドを実行できます。 put -r:

  1. put -r localDirectory

ファイルのダウンロードとアップロードに役立つ使い慣れたツールの1つは、 df コマンド。コマンドラインバージョンと同様に機能します。 これを使用して、関心のある転送を完了するのに十分なスペースがあることを確認できます。

  1. df -h
Output
Size Used Avail (root) %Capacity 19.9GB 1016MB 17.9GB 18.9GB 4%

このコマンドのローカルバリエーションはありませんが、を発行することで回避できることに注意してください。 ! 指図。

The ! コマンドはローカルシェルにドロップし、ローカルシステムで使用可能な任意のコマンドを実行できます。 次のように入力して、ディスク使用量を確認できます。

  1. !

その後

  1. df -h
Output
Filesystem 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セッションに戻るには、次のように入力します。

  1. exit

これで、SFTPプロンプトが返されるはずです。

SFTPを使用した簡単なファイル操作

SFTPを使用すると、ある種のファイルシステムのハウスキーピングを実行できます。 たとえば、リモートシステム上のファイルの所有者を次のように変更できます。

  1. chown userID file

システムとは異なり、どのように注意してください chmod コマンドの場合、SFTPコマンドはユーザー名を受け入れませんが、代わりにUIDを使用します。 残念ながら、SFTPインターフェイス内から適切なUIDを知る組み込みの方法はありません。

回避策として、あなたはから読むことができます /etc/passwd ほとんどのLinux環境でユーザー名をUIDに関連付けるファイル:

  1. get /etc/passwd
  2. !less passwd
Output
root: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番目の列にあります。

同様に、ファイルのグループ所有者を次のように変更できます。

  1. chgrp groupID file

繰り返しますが、リモートシステムのグループのリストを取得するための組み込みの方法はありません。 次のコマンドで回避できます。

  1. get /etc/group
  2. !less group
Output
root: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を保持します。 これが私たちが探しているものです。

The chmod SFTPコマンドは、リモートファイルシステムで通常どおり機能します。

  1. chmod 777 publicFile
Output
Changing mode on /home/demouser/publicFile

ローカルファイルのアクセス許可を操作するための同等のコマンドはありませんが、ローカル umask を設定して、ローカルシステムにコピーされたすべてのファイルが対応するアクセス許可を持つようにすることができます。

それはで行うことができます lumask 指図:

  1. lumask 022
Output
Local umask: 022

これで、すべての通常のファイルがダウンロードされました( -p フラグは使用されません)は644の権限を持ちます。

SFTPを使用すると、ローカルシステムとリモートシステムの両方にディレクトリを作成することもできます。 lmkdirmkdir それぞれ。

残りのファイルコマンドは、リモートファイルシステムのみを対象としています。

  1. ln
  2. rm
  3. rmdir

これらのコマンドは、同等のシェルのコア動作を複製します。 ローカルファイルシステムでこれらのアクションを実行する必要がある場合は、次のコマンドを発行してシェルにドロップできることに注意してください。

  1. !

または、コマンドの前に次のコマンドを付けて、ローカルシステムで単一のコマンドを実行します ! そのようです:

  1. !chmod 644 somefile

SFTPセッションが終了したら、次を使用します。 exit また bye 接続を閉じます。

  1. bye

結論

SFTP構文は、最新のシェルツールよりもはるかに包括的ではありませんが、従来のFTP構文との互換性を提供したり、一部の環境のリモートユーザーが利用できる機能を慎重に制限したりする場合に役立ちます。

たとえば、SFTPを使用して、特定のユーザーがSSHアクセスなしでファイルを転送できるようにすることができます。 このプロセスの詳細については、シェルアクセスなしでSFTPを有効にする方法のチュートリアルを確認してください。

FTPまたはSCPを使用して転送を実行することに慣れている場合、SFTPは両方の長所を活用するための優れた方法です。 すべての状況に適しているわけではありませんが、レパートリーに含めることのできる柔軟なツールです。