WinSCPの基本と応用：FTPとSFTPの違いを知り、セキュアなファイル転送を実現する方法について

## はじめに
WinSCP（Windows Secure Copy）は、Windows環境で使用できる人気の高いSFTP（SSH File Transfer Protocol）およびFTP（File Transfer Protocol）クライアントです。

:::note warn
***リモートサーバーとローカルコンピュータ間でファイルを転送するための、簡単で安全な方法を提供します。***
:::

例えば、EC2などのクラウド基盤で動いているサーバーにも、WinSCPを使って安全に.pemキーなどのファイルを転送することができ、***インフラエンジニアにとって必須のツールとなっています！***

本記事では、WinSCPのインストール方法から基本的な使い方、便利な機能までをご紹介します。

## FTPとSFTPの違い

FTP（File Transfer Protocol）は、ファイルを転送するための古典的なプロトコルですが、暗号化なしでデータを送信するため、セキュリティが低いという特徴があります。

![スクリーンショット 2024-12-14 15.54.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/9053b2c1-e261-2507-aac9-ced5e794dc2c.png)
引用画像：https://academy.gmocloud.com/wp/keywords/20170308/4155

:::note 
***一方、SFTP（SSH File Transfer Protocol）は、SSHを利用してデータを暗号化し、安全にファイルを転送できるプロトコルです。***
:::

以下にそれぞれの違いをまとめました。

| 項目            | FTP                                | SFTP                               |
|-----------------|------------------------------------|------------------------------------|
| **セキュリティ** | 暗号化なし                        | SSHを利用した暗号化あり            |
| **使用ポート**   | ポート21                           | ポート22                           |
| **データ転送**   | 平文で転送される                   | 暗号化されて転送される             |
| **認証方法**     | パスワード認証（暗号化なし）       | パスワード認証または公開鍵認証    |
| **使用用途**     | セキュリティがそれほど重要でない場合 | セキュリティが重要なファイル転送  |

FTPはポート21を使用し、SFTPはポート22を使用します。***セキュリティが重要な場合は、SFTPの使用が推奨されます。***

## 事前準備

まず、WinSCPの公式サイトにアクセスし、トップページから「DOWNLOAD NOW」ボタンをクリックしてインストーラをダウンロードします。

https://winscp.net/eng/index.php

次に、ダウンロードしたインストーラを実行し、インストールウィザードに従って進めます。「次へ」や「インストール」をクリックして、インストールを完了させてください。

![スクリーンショット 2024-12-14 14.41.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/e19459f5-9410-3ae6-e843-cd1d0c596ba1.png)

:::note warn
***今回の自宅検証のゴールは、自宅のVirtualBox上に構築しているLinuxサーバーに、ローカルデスクトップのファイルを配置することです。***
:::

VirtualBoxの詳細な構築手順については、過去の記事を参考にしてください。

https://qiita.com/free-honda/items/ca757d6414a8ea344ea1

## WinSCPを使ってサーバーに接続してみる

まず、WinSCPを起動します。初回起動時には接続設定画面が表示されます。

![スクリーンショット 2024-12-14 15.19.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/1741b3bd-6560-031a-e076-35612b04bd93.png)

ここでは、リモートサーバーに接続するための情報を入力します。以下の項目を設定してください。

:::note info
- **転送プロトコル：SFTP**
- **ホスト名：サーバーのホスト名**
- **ユーザ名：サーバーのユーザ名**
- **パスワード：サーバーのログインパスワード**
:::

ポート番号については、デフォルト設定の「22」のままで問題ありません。

![スクリーンショット 2024-12-14 15.11.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/22dc4501-f4f0-1078-e8e4-1a7bb22ccff2.png)

必要な情報をすべて入力したら、「ログイン」をクリックして接続します。

接続後の画面では、左側がローカル端末のデスクトップディレクトリ、右側がサーバー内の```/home/honda/Desktop```ディレクトリになっています。

![スクリーンショット 2024-12-14 15.14.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/ae62d5e4-606b-9a1a-3b2c-a09e1c069a35.png)

さらに、Tera Termを使ってSSH接続し、サーバー内のディレクトリを確認し、中身は空であることが確認できました。

![スクリーンショット 2024-12-14 15.20.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/eea6f1c5-e137-c7a5-abcd-8b68ec4adb9b.png)

## 実際にファイルをサーバーに配置してみる
次に、ローカル端末のデスクトップにある```test.txt```ファイルをサーバー側に転送してみます。

![スクリーンショット 2024-12-14 15.22.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/2aedc3d0-d78f-b083-08da-d5e3132398e4.png)

:::note alert
**注意点：**
***ファイル形式に応じて、転送設定を変更する必要があります。ここではテキストファイルを転送するため、「テキスト」を選択してください。***
:::

ファイルはドラッグアンドドロップで簡単にコピーできます。

初回はダイアログが表示されますので、「OK」を選択して転送を開始してください（**✅のチェックを外すと、2回目以降はダイアログが表示されません**）。

![スクリーンショット 2024-12-14 15.24.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/7352a32a-0a8c-ec20-d462-b964e9beabf0.png)

転送が完了すると、ローカル端末の```test.txt```ファイルがサーバー側に配置されていることを確認できます。

![スクリーンショット 2024-12-14 15.27.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/ef26677d-8be1-42e0-f040-f8b168ebf5c7.png)

## 配置されたファイルを確認してみた

再度、Tera Termのターミナル画面を使って、サーバー側にファイルが配置されているか確認します。

![スクリーンショット 2024-12-14 15.29.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/5521055c-a74a-eadc-f144-dc70cbc4430d.png)

先ほどまでは存在しなかった ```test.txt``` ファイルがサーバー内にあることを確認できました。さらに、```cat``` コマンドを使ってファイルの中身を確認します。

![スクリーンショット 2024-12-14 15.31.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/e325cb07-2da9-a171-97c7-c09b5527c7c7.png)

配置したファイルにはあらかじめ以下のテキストを記載しており、正しく表示されることを確認できました。

```bash
WinSCPを使った転送成功！
```

:::note
***WinSCPはセキュリティを重視したファイル転送が可能な便利なツールです。この機会にぜひインストールしてみてください。***
:::

## WinSCPの魅力

普段Linuxではコマンド操作が基本ですが、WinSCPを使うとGUIでディレクトリやファイルの作成が簡単に行えます。

![スクリーンショット 2024-12-14 15.36.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/f7f5cbf4-bfdc-5642-c926-e0ff752cab4d.png)

例えば、新規ファイルを作成して「```hello world!!```」と入力し、左上の保存ボタンをクリックして保存できます（コマンド操作でいうところの ```:wq!``` に相当します）。

![スクリーンショット 2024-12-14 15.36.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a928c7d0-92bb-353c-ce28-177a5651eac5.png)

WinSCPの画面上でもファイルやディレクトリが作成されたことを確認できます。

![スクリーンショット 2024-12-14 15.37.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/34394306-3606-69db-0f15-c29847c88e60.png)

サーバー側でも ```hogehoge``` というファイルが作成され、中身には「```hello world!!```」と記載されていることを確認できました。

![スクリーンショット 2024-12-14 15.39.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/f2f75aa8-e0be-67a3-8c09-00485f6c19e2.png)

***Linuxの操作に不慣れな方や、GUIでの作業を好む方には特におすすめのツールです。***

## まとめ

ここまでご覧いただきありがとうございました。

:::note warn
***WinSCPは、WindowsでSFTPやFTPを使った安全なファイル転送を可能にし、リモートサーバーへの接続とGUIでの簡単なファイル操作を実現します。***
:::

この記事が、皆さんの技術的な学びの助けになれば幸いです！今後もインフラ視点で便利なツールを紹介していきますので、ぜひお楽しみに！

## ***おまけ：Macユーザーの場合は```scp```コマンドで転送可能！***

Windows環境ではWinSCPが便利ですが、Mac環境では別の方法を使用します。

***Macには標準でターミナルが備わっており、```scp``` コマンドを使うことでファイル転送が可能です。***

```bash
scp /path/to/local/file.txt username@server:/path/to/remote/directory/
```

このコマンドを使用することで、ローカルのファイルをサーバーに転送できます。

***私も普段からMacを愛用しており、ファイル転送には主に```scp```コマンドを活用しています。***

## 関連記事

https://dev.classmethod.jp/articles/winscp-amazon/

https://dev.classmethod.jp/articles/connected-to-s3-with-winscp/

https://www.itreview.jp/products/winscp/reviews/21486