---
# System prepended metadata

title: 彈性週 (ssh、)

---

# 彈性週 (剩下的 ssh、TCP/IP、DNS)
[TOC]
# ssh
## 遠端檔案傳輸
### FTP操作
* ftp [ip address] 登入
* (公眾的 server，username 可輸入anonymous作為匿名，密碼可空白)
* put [client_file] [server_pwd]  上傳檔案
* get [file] [client_pwd] 下載檔案
* ls 跟 cd 與Linux指令一樣
* lpwd 顯示本機端目前位置/ lcd 切換本機端位置
* bye 退出
### SFTP
* **S**SH **F**ile **T**ransfer **P**rotocol
* 指令和FTP語法基本一樣
* 是SSH的一部分

| 特性   | FTP | SFTP |
| ------ |:---:|:---:|
| 效率   | 🏆  |      |
| 安全性 |     |  🏆  |

### SCP
* scp 為遠端複製檔案
- 用法
    - scp [參數] [source] [destination]
* 本機上傳至遠端
    - scp [本機檔案路徑] [usr_name]@[hostname]:[遠端檔案路徑]
    - path 不輸入則為家目錄
* 遠端下載到本機
    - scp [usr_name]@[hostname]:[遠端檔案路徑] [本機檔案路徑]

### Rsync
* Rsync 能做到 cp 跟 scp 的事，但 Rsync 的效率更好
* 如複製時發現有一樣檔案在裡面，會利用 delta-transfer 演算法檢查新舊檔案之間的差異，只傳送有變動的部份
    - 節省複製的時間，可加快備份速度（大檔案傳輸時會有更明顯的差異）
    - 進行遠端傳輸時，可節省網路頻寬
* #### rsync操作
    - 為內建工具，但如果沒安裝:
    - sudo apt install rsync
* #### 基礎語法
    - rsync [參數] [來源檔案] [目的檔案]
* 常見參數

| 參數 | 說明 |
|-------|------|
| -v | verbose 模式，輸出較詳細的訊息。|
| -a | 封裝備份模式，遞迴備份所有子目錄下的目錄與檔案，保留連結檔、檔案的擁有者、群組、權限以及時間戳記。 |
| -z | 啟用壓縮。|
| -h | 將數字以較容易閱讀的格式輸出。|
| -P / --progress | 顯示傳輸進度。|
| --delete | 同步將不存在於來源端的檔案刪除。|


### ssh tunnel
- **==L==ocal Port Forwarding**
    - `ssh -L [bind_address:][client_port]:[host]:[target_server_port] [username]@[server]`
    - 本地電腦client繞過防火牆連線到特定server的特定port

- **==R==emote Port Forwarding**
    - `ssh -R [bind_address:][ssh_server_port]:[host]:[client_port] [username]@[server]`
    - 其他電腦透過對外機器ssh server取得本地電腦client服務
    
- **==D==ynamic Port Forwarding**
    - `ssh -D [bind_address:][client_port] [username]@[server]`
    - 類似local，但不指定連到特定server的哪個port，而是接到代理伺服器proxy

# TCP/IP
