# FTP/FTPS/SFTP
---
## 簡介
- [ ] [FTP](https://zh.wikipedia.org/wiki/FTP)
- File Transfer Protocol
FTP 即 文件傳輸協議(英語:File Transfer Protocol 的縮寫)是一個用於計算機網絡上在客戶端和伺服器之間進行文件傳輸的應用層協議。完整的 FTP 是由 FTP 伺服器 和 FTP 客戶端組成的,客戶端可以將本地的文件通過 FTP 協議上傳到伺服器,也可以將伺服器的文件下載到本地。它是當今使用的最古老的文件傳輸協議之一,是一種非常便捷的移動文件的方式。
當建立 FTP 連接時會有兩個不同的通信通道。一個被稱爲命令通道,它的作用是發出和響應指令。另一個爲數據通道,用於客戶端和伺服器端進行數據交互。傳輸文件時,用戶需要通過向 FTP 伺服器提供憑據來獲得文件傳輸許可。當然某些公共 FTP 伺服器可能不需要憑據即可訪問其文件,但是無法保證數據傳輸的安全性。
- [ ] [FTPS](https://zh.wikipedia.org/wiki/FTPS)
- FTPS是FTP標準的擴充,添加了安全通訊協定(SSL)以及其繼任者傳輸層安全性協定(TLS)的支援。
FPTS 有 FTPS 隱式 SSL 和 FTPS 顯示 SSL 兩種模式,兩者都是用 SSL 加密。
FTPS 隱式 SSL:該模式通常在埠 990 上運行。在這個模式下全部數據的交換都需要在客戶端和伺服器之間建立 SSL 會話,並且伺服器會拒絕任何不使用 SSL 進行的連接嘗試。
FTPS 顯式 SSL:顯示 SSL 下伺服器可以同時支持 FTP 和 FTPS 會話。開始會話前客戶端需要先建立與 FTP 伺服器的未加密連接,並在發送用戶憑證前先發送 AUTH TLS 或 AUTH SSL 命令來請求伺服器將命令通道切換到 SSL 加密通道,成功建立通道後再將用戶憑證發送到 FTP 伺服器,從而保證在會話期間的任何命令都可以通過 SSL 通道自動加密。
- [ ] [SFTP](https://zh.wikipedia.org/wiki/SFTP)
- SSH File Transfer Protocol/Secure File Transfer Protocol
是一數據流連線,提供檔案存取、傳輸和管理功能的網路傳輸協定。由網際網路工程任務組(IETF)設計,透過SSH 2.0 的擴充提供安全檔案傳輸能力,但也能夠被其他協定使用。
SFTP 不使用單獨的命令通道和數據通道,而是數據和命令都會通過單個連接以特殊格式的數據包進行傳輸,並且提供的驗證連接方法,都是有憑據是加密,這是 SFTP 最主要的安全優勢。
## 使用時機
如果檔案需要加密使用 SFTP 不要考慮 FTPS
如果檔案大小過大使用 FTP 不要考慮 FTPS
傳輸效率 FTP > SFTP
安全性 FTP < SFTP
主觀意見 FTPS 沒必要去使用...
---
## 建置流程
1. [部屬相關檔案位置](https://dev.azure.com/chinlunhsiao/FileTransferProtocol4HCL)
2. Build FTP docker image
3. Modify .env file
4. Run/Stop service
**Build FTP Service**
```shell=
cd FTPService
cd Build
docker build . -t ftp:202205
cd ..
cd RunFTP
docker-compose ftp.yml up -d
docker-compose ftp.yml down -v
```
Client SOP




---
**Build SFTP Service**
```shell=
cd SFTPService
cd Build
docker build . -t sftp:202205
cd ..
cd RunSFTP
docker-compose sftp.yml up -d
docker-compose sftp.yml down -v
```
Client SOP




---