SSH (Secure Shell)
作者資料
SSH, SCP, SFTP
Port Forward, Tunneling
基本問題
為什麼分享這個?
因為大部分的同學在剛接觸到SSH時,就僅知道它可以用來遠端連線到目標得主機,但並不知道SSH有非常多神奇的功能,若沒有這些方便的功能,VSCode也無法整合的如此易於使用,因此,今天就要帶著各位領略一下這強大的工具。
SSH 是能有多複雜?
作為基本的連線工具,確實我們不用在意背後難以理解的密碼學或是金鑰交換方式;或是在目標主機支援的加密方式過老時,該怎麼在Client端開啟對方支援的方法;這些都是在遇到時,再去思考的問題,今天主要還是注重在SSH本身與額外延伸出來的各種用法。
那實際上會講到什麼?
- SSH
- SCP
- SFTP
- TAR
主要為上述四項,不過這四項也夠今天的用例了(`・ω・´)
SSH
最標準的
# Command
ssh <username>@<host> -p <port>
# Example
ssh jolly@192.168.64.2 -p 22
若加上指令呢?
# Command
ssh <username>@<host> <execute command>
# Example
ssh jolly@192.168.64.2 ls -al
通訊埠轉發(遠端 -> 本機)
# Command, l => local, r => remote
ssh <username>@<host> -L <l port>:<r host>:<r port>
# Example
ssh jolly@192.168.64.2 -L 7080:127.0.0.1:80
通訊埠轉發(本機 -> 遠端)
# Command, l => local, r => remote
ssh <username>@<host> -R <r port>:<l host>:<l port>
# Example
ssh jolly@192.168.64.2 -R
通訊埠轉發(動態)
# Command, l => local
ssh <username>@<host> -D <l host>:<l port>
# Example
ssh jolly@192.168.64.2 -D 127.0.0.1:7081
上述功能用途較為特別,會在系統上建立Socks通道,當瀏覽器或系統的Proxy設定完成後,請求就會通過該通道,直接送到遠端主機做代理請求,也就是說,功能類似於平時使用的VPN。
補充資料
- SSH Command - Usage, Options, Configuration
- SSH Tunneling (Port Forwarding) 詳解
- 用 SSH Tunnel 來避免防火牆阻擋實作與反制
SCP
簡單的說,是Secure Copy的縮寫,只要是需要移動檔案,且目標主機有SSH服務,就可以透過SCP進行操作!
送出去(本機 -> 遠端)
# Command, l => local, r => remote
scp -P <port> <l path> <username>@<host>:<r path>
# Example
scp -P 22 ./test.js jolly@192.168.64.2:~/
拖回來(遠端 -> 本機)
# Command, l => local, r => remote
scp <username>@<host>:<r path> <l path>
# Example
scp jolly@192.168.64.2:~/
借個通道(遠端 -> 遠端)
# Command, r1 => Host 1, r2 => Host 2
scp <user>@<r1>:<r1 path> <user>@<r2>:<r2 path>
# Example
scp root@192.168.192.254:~/ToolScript/iommu.bash jolly@192.168.64.2:~/
SFTP
就跟以往使用FTP的用法差不多,只要有SSH服務,就能進行連線!
危險
注意一下,SFTP與FTPS是兩個不同的協定喔,FTPS類似於HTTPS,都是幫原先的協定加上SSL/TLS層。
連線
# Command
sftp <username>@<host>
# Example
sftp jolly@192.168.64.2
操作指令
Option | Description |
---|---|
? | 有什麼可以用 |
ls | 列出遠端目錄 |
lls | 列出本機目錄 |
cd | 切換遠端目錄 |
lcd | 切換本機目錄 |
pwd | 顯示遠端路徑 |
lpwd | 顯示本機路徑 |
操作指令II
Option | Description |
---|---|
get | 從遠端下載檔案 |
put | 從本機上傳檔案 |
quit/exit/bye | 退出SFTP |
SCP 與 SFTP 的差異?
SCP主要注重在複製,需要先明確好遠端檔案的路徑,但相對較快(因算法不驗證每個封包)。
SFTP提供目錄瀏覽,讓你決定好再進行操作,與FTP的用法相同,能管理目錄,也可以續傳(當連線因意外斷線時,很有用)。
補充資料
TAR
打包工具 但今天主要是在說明跟SSH結合時可以怎麼用
神奇的Pipe用法
在目前的大多數作業系統中,都存在所謂的Pipe用法,也就是將前一條指令的執行結果作為下一條的輸入,接力執行,而今天的用法就是要使用這樣的特性去傳輸資料。
打包備份
# 從本機送出去
tar zcvf - /var/www | ssh <username>@<host> "cat > ~/backup/www.tar.gz"
# 遠端拖本機過來
ssh <username>@<host> tar zcvf - /var/www/ > ~/backup/www.tar.gz
同時打包與解包
ssh <username>@<host> 'tar zcf - /some/dir' | tar zxf -
額外加碼:DD
備份整顆硬碟
dd if=/dev/sdx | ssh <user>@<host> 'dd of=sdx.img'
ssh <user>@<host> 'dd if=sdx.img' | dd of=/dev/sdx