(最終更新月:2023年4月)
✔このような方へ向けて書かれた記事となります
「SFTPって何だろうか?」
「FTPとどちらを使えば良いのか知りたい」
「SFTPを使った実例を教えて」
✔当記事を通じてお伝えすること
- SFTPの基本
- SFTPの使い方
- SFTPの実例
当記事では、SFTPコマンドの基本はもちろん、その使い方や実例まで、初心者にもわかりやすく、丁寧に解説しています。
ぜひ最後までご覧ください。
SFTPコマンドを使うのに必要な基礎知識
SFTPコマンドを使うために、最低限必要な知識を見ていきましょう。
理解したうえであれば、より早くそのやり方を吸収できます。
- SFTPコマンドとは?
- SFTPとFTPの違い
- SFTPのセキュリティ特徴
SFTPコマンドとは?
SFTP(Secure File Transfer Protocol)コマンドは、インターネットを通じてファイルを安全に転送するためのプロトコルです。
SFTPはSSH(Secure Shell)上で動作し、通信内容を暗号化することで、データの漏洩や改ざんを防ぎます。
転送に使うデフォルトのポート番号は22で、SSH用のポートを使用します。
SFTPとFTPの違い
SFTPとFTP(File Transfer Protocol)は、どちらもファイル転送のためのプロトコルですが、セキュリティ面で大きな違いがあります。
FTPは通信内容が暗号化されていないので、データが盗聴されるリスクがあるのです。
対してSFTPは、SSHを利用して暗号化された通信をおこなうため、より安全にファイルを転送できまfす。
FTPコマンドについては詳しくこちらで解説しています。
SFTPのセキュリティ特徴
SFTPは、以下のようなセキュリティ面での特徴を持っています。
- 通信内容の暗号化:データ転送時の暗号化で、第三者によるデータ盗聴を防げる
- 認証方式の選択:パスワード認証や公開鍵認証など、複数の認証方法を選択できる
- データ完全性の保証:転送中のデータが改ざんされていないことを確認できる。
SFTPコマンドのインストール
SFTPコマンドのインストール方法はこちら。
OS別に異なるので、インストールがまだの方は、適した箇所をご覧ください。
- Windowsの場合
- macOSの場合
- Linuxの場合
Windowsの場合
Windowsでは、Windows 10以降であれば、OpenSSHクライアントをインストールすることでSFTPコマンドが利用できます。
設定アプリの「アプリ」→「オプション機能」でOpenSSHクライアントを選択して、インストールしてください。
macOSの場合
macOSでは、デフォルトでSFTPコマンドが利用できます。
ターミナルを開いて、直接SFTPコマンドを実行しましょう。
Linuxの場合
Linuxでは、ほとんどのディストリビューションでデフォルトでSFTPコマンドがインストールされています。
もしインストールされていない場合は、パッケージマネージャーを利用してOpenSSHをインストールしてください。
インストールできているかは以下のようにして調べましょう。
$ dpkg -l | grep ssh
ii libssh-4:amd64 0.9.3-2ubuntu2.2 amd64 tiny C SSH library (OpenSSL flavor)
ii libssh-gcrypt-4:amd64 0.9.3-2ubuntu2.2 amd64 tiny C SSH library (gcrypt flavor)
ii libssh2-1:amd64 1.8.0-2.1build1 amd64 SSH2 client-side library
ii openssh-client 1:8.2p1-4ubuntu0.5 amd64 secure shell (SSH) client, for secure access to remote machines
ii python3-paramiko 2.6.0-2ubuntu0.1 all Make ssh v2 connections (Python 3)
ii sshfs 3.6.0+repack+really2.10-0ubuntu1 amd64 filesystem client based on SSH File Transfer Protocol
SFTPコマンドの基本構文と操作
SFTPコマンドの基本構文と操作について、詳しく見ていきます。
どのようにして使っているのかの事例を通じて、理解していきましょう。
- 接続する
- 切断する
- ディレクトリを移動する
- ディレクトリリストを表示する
- ファイルやディレクトリをアップロードする
- ファイルやディレクトリをダウンロードする
- ファイルやディレクトリをリネームする
- ファイルやディレクトリを削除する
- ファイル検索の方法
1.接続する
sftp ユーザー名@ホスト名
$ sftp hnish@xxx.com #xxx.comにはSSH接続が可能なドメインを入力
Connected to xxx.com
sftp>
2. 切断する
bye もしくは exit
3. ディレクトリを移動する
cd ディレクトリ名
sftp> cd /var/www/html
4. ディレクトリリストを表示する
sftp> ls
5. ファイルやディレクトリをアップロードする
put ローカルファイル [リモートファイル]
put index.html
ファイルをアップロードしたいディレクトリに移動してからおこないましょう。
6. ファイルやディレクトリをダウンロードする
get リモートファイル [ローカルファイル]
get example.txt
7. ファイルやディレクトリをリネームする
rename 旧ファイル名 新ファイル名
rename old.txt new.txt
8. ファイルやディレクトリを削除する
rm ファイル名
rm test.txt
rmdir ディレクトリ名
rmdir example_directory
9. ファイル検索の方法
find ディレクトリ名 -name “検索条件”
find /var/www/html -name "*.php"
SFTPコマンドのオプション一覧
SFTPコマンドのオプションを一覧でまとめました。
使用を考えている方は目を通しましょう。
オプション名 | 概要 | 実例 |
---|---|---|
-P ポート番号 | 接続先のポート番号を指定します。 | sftp -P 2222 user@example.com |
-b バッチファイル | バッチファイルを指定して一連のコマンドを実行します。 | sftp -b batchfile.txt user@example.com |
-C | 転送時に圧縮を有効にします。 | sftp -C user@example.com |
-p | ファイルのアクセス時刻や修正時刻を保持します。 | sftp -p user@example.com |
-q | クライアントからの出力を抑制します。 | sftp -q user@example.com |
-r | 再帰的にディレクトリをダウンロードまたはアップロードします。 | sftp -r user@example.com |
-v | 詳細なデバッグ情報を出力します。 | sftp -v user@example.com |
-i 秘密鍵ファイル | 秘密鍵ファイルを指定して公開鍵認証を使用します。 | sftp -i ~/.ssh/id_rsa user@example.com |
-o オプション | OpenSSHのオプションを指定します。 | sftp -o "StrictHostKeyChecking=no" user@example.com |
SFTPコマンドの応用操作
SFTPコマンドで応用した操作についても見ていきます。
これまでの内容を理解できているなら、次のステップへ進んでください。
- ファイルの権限を変更する
- 接続先の情報を保存しておく
- 公開鍵認証を使用する
- ファイル転送の自動化
- バッチ処理の実行
- エラーハンドリング
ファイルの権限を変更する
SFTPでファイルを転送したら、権限変更の必要が出てくる場合があります。
以下のコマンドを覚えておきましょう。
chmod 権限設定 ファイル名
chmod 755 script.sh
公開鍵認証を使用する
公開鍵認証を使用することで、より安全にSFTP接続をおこなえます。
なぜならパスワード流出の危険がなく、より安全な暗号化の方法が取れるからです。
ローカルマシンでSSHキーペアを生成し、公開鍵をリモートサーバーの適切なディレクトリに配置します。
その後、SFTPクライアントで秘密鍵を指定して接続しましょう。
以下の記事にやり方を載せています。
ファイル転送の自動化
スクリプトやバッチファイルを使用して、SFTPコマンドを自動化できます。
例えば、定期的にファイルをアップロードする場合、CronやTask Schedulerを使用して自動化を設定しましょう。
バッチ処理の実行
SFTPコマンドでバッチファイルを使用すると、一連のコマンドを一度に実行できます。
例えば以下のようなバッチファイルを作成すると、ディレクトリ移動やダウンロード、アップロードが自動化できるのです。
cd /remote/directory
lcd /local/directory
get file1.txt
get file2.txt
put file3.txt
put file4.txt
実行するには以下のコマンドです。
sftp -b batchfile.txt user@example.com
エラーハンドリング
SFTPコマンドを使用する際にエラーが発生した場合、エラーメッセージを確認し、問題を特定して解決してください。
自動化やバッチ処理の際には、エラーハンドリングを適切におこなうことが重要です。
SFTPクライアントの選択
SFTPクライアントの選択について、いくつかポイントを見ていきましょう。
- おすすめのSFTPクライアント
- 各クライアントの特徴
おすすめのSFTPクライアント
おすすめできる任期のSFTPクライアントは以下のとおり。
- FileZilla:無料でオープンソースのクライアントであり、Windows、macOS、Linuxで利用できます。使いやすいインターフェースと機能が豊富
- WinSCP: Windows専用のSFTPクライアントで、無料で使えます。コマンドラインからの操作も可能で、自動化にも対応
- Cyberduck: WindowsとmacOSで利用できる無料のSFTPクライアントで。直感的な操作と多機能さが特徴
クライアントの特徴
各クライアントの特徴をもう少し詳しく見てみましょう。
ついている機能は以下のとおりです。
- FileZilla: ドラッグ&ドロップでのファイル転送、転送速度制限、リモートファイル編集などの機能
- WinSCP: マスターパスワード保護、リモートディレクトリの同期、統合テキストエディタなどが利用
- Cyberduck: ブックマーク機能、クラウドストレージとの連携、ファイルの圧縮・解凍機能などが特徴
トラブルシューティング
SFTPを扱ううえでの、トラブルとその解決策を見ていきましょう。
ひとつずつご覧ください。
- 接続ができない
- ファイルのアップロードやダウンロードができない
- ファイルの権限が変更できない
- よくあるエラーと対処法
- デバッグ方法
接続ができない
考えられる原因
- ネットワーク接続の問題
- ポート番号が間違っている
- ユーザー名やパスワードが間違っている
- 接続先サーバーのSFTPサービスが停止している
対処法
- ネットワーク接続を確認し、問題がないことを確認してください。
- ポート番号が正しいか確認してください。
- ユーザー名やパスワードが正しいか確認してください。
- 接続先サーバーの管理者に連絡し、SFTPサービスの状態を確認してもらってください。
ファイルのアップロードやダウンロードができない
考えられる原因
- ディスク容量不足
- ファイルやディレクトリのアクセス権限が不足している
- ファイルパスが間違っている
対処法
- ディスク容量を確認し、不足している場合は空き容量を増やしてください。
- ファイルやディレクトリのアクセス権限を確認し、必要であれば変更してください。
- ファイルパスが正しいか確認してください。
ファイルの権限が変更できない
考えられる原因
- 権限変更操作に必要な権限がユーザーに与えられていない
- ファイルやディレクトリのオーナーやグループが適切でない
対処法
- SFTP接続時のユーザー権限が、権限変更を許可していることを確認してください。
- ファイルやディレクトリのオーナーやグループが適切であることを確認してください。
よくあるエラーと対処法
- “Permission denied”: 権限不足によるエラーなので、ファイルやディレクトリのアクセス権限を確認
- “No such file or directory”: ファイルやディレクトリが存在しない場合のエラーなので、正しいファイルパスを指定しているか確認
- “Connection timed out”: 接続がタイムアウトした場合のエラーで、ネットワーク状況を確認し、必要に応じてタイムアウト時間を延ばす
まとめ
当記事の内容をまとめます。
- セキュリティを強化するために、公開鍵認証を使用
- よく使う接続先はブックマークやプロファイルに保存しておくと便利
- ファイル転送を自動化したい場合は、スクリプトやバッチファイルを活用
SFTPはクライアントツールと並行しながら使うと効果的です。
もし自動化などをしたいなら、コマンドを上手く活用しましょう。