SFTPを使用してリモートサーバーでファイルを安全に転送する方法
序章
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
The get
コマンドは、いくつかのオプションフラグも受け入れます。 たとえば、再帰オプションを指定することで、ディレクトリとそのすべてのコンテンツをコピーできます。
- get -r someDirectory
を使用して、適切なアクセス許可とアクセス時間を維持するようにSFTPに指示できます。 -P
また -p
国旗:
- 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%
このコマンドのローカルバリエーションはありませんが、を発行することで回避できることに注意してください。 !
指図。
The !
コマンドはローカルシェルにドロップし、ローカルシステムで使用可能な任意のコマンドを実行できます。 次のように入力して、ディスク使用量を確認できます。
- !
その後
- 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を保持します。 これが私たちが探しているものです。
The 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は両方の長所を活用するための優れた方法です。 すべての状況に適しているわけではありませんが、レパートリーに含めることのできる柔軟なツールです。