ssh tunneling

微微介紹

ngrok

bottender

外網應該沒辦法直接找到在內網下的電腦...

port forwarding

ssh port forwarding

SSH (Secure Shell)

主要功能為建立電腦之間 (經過加密) 的 tunnel

  • 遠端登入、下 command
  • 檔案傳輸
  • port forwarding
  • ...

 

是一個協定 (約定)

什麼是 tunnel

HTTPS 也有加密

利用 HTTPS 溝通的話,可以算是 tunnel 嗎

HTTP/HTTPS 不被認為是 tunneling protocol

的原因可能是他主要不是被用來傳送別的協定

ssh

將其他應用層的協定封裝在負載部分

ssh 是基於 TCP 的

(大部分) 

TCP 是另外一個協定

什麼是基於

layer 的概念

A

B

A 寄信給 B

樓層信件管理員

辦公室信件管理員

大樓信件管理員

郵局

樓層信件管理員

辦公室信件管理員

大樓信件管理員

郵局

郵差送信

layer 的概念

上層基於下層

A 和 B 的溝通是基於辦公室信件管理員的服務

辦公室信件管理員的服務是基於樓層信件管理員的服務

樓層信件管理員的服務是基於大樓信件管理員的服務

...

每一層知道下層幫他完成什麼跟他要幫上層完成什麼

基於

借會議室基於

網際網路協定套組

https://upload.wikimedia.org/wikipedia/commons/0/0f/Ssh_binary_packet_alt.svg

ssh 的 packet (data)

ssh 的 packet (data)

將其它應用層的協定 (例如 HTTP)

封裝在負載部分

tunnel

A

A1

B1

B

A 想要寄明信片給 B

但是他可能不想或是不能直接寄給他

A1 和 B1 就是 ssh connection 的兩端

server & client

A 把明信片寄給 A1

B1 拿到打開來

把明信片寄給 B

A 利用 A1 和 B1 間的「通道」來和 B 溝通

A1 把 A 的信包起來傳給 B1

因為訊息有加密,所以像「通道」

因為可以穿透,所以像「通道」

client - server 架構

3 個階段

  1. 確認 server、建立加密通道
  2. client 權限確認
  3. 在通道上做事情

1 確認 server

(server authentication)

可能會用 public key & private key

client 用 server 的 public key 加密一段訊息 傳給 server

server 解開來傳給 client 證明他有相對應的 private key

第一次的話有風險

client 要事先知道 server 的 public key

才能避免可能有人騙他

client 要確認自己有找對 server

1 建立加密通道

(key exchange)

雙方要協調出 shared secret (key) 跟 hash function

對稱加密 vs 非對稱加密

對稱加密 (shared secret)

用同一把 key 加解密

要想辦法讓參與的人知道 key

非對稱加密 (public key & private key)

用對方的 public key 加密

用自己的 private key 解密

public key 公開,private key 只有自己留著

非對稱加密

因為 public key 是公開的

public key 跟 private key 又有一定的關聯性

要達到跟 shared secret 差不多的強度

key 的長度需要長很多

所以加解密會慢很多

怎麼產生 shared secret 又不會被別人知道

Diffie-Hellman

2 client 權限確認

  • public key 事先放在 server
  • password
  • 憑證
  • ...

3 在通道上做事情

一個 ssh connection 下還有分 channel

可以同時做很多事

  • 開 shell、下 command
  • TCP port forwarding
  • X forwarding
  • ...

 

用 layer 的角度來看

ssh port forwarding

Appication

Client

Appication

Server

ssh

ssh

tunnel

Listen 端

Forward 端

local forwarding

Appication

Client

Appication

Server

ssh

client

tunnel

ssh

server

Local 端

Server 端

ssh -L [local_port]:[forward_to_host]:[forward_to_port] [ssh_user]@[ssh_host]

local forwarding

Appication

Client

Database

Server

ssh

client

tunnel

ssh

server

Local 端

Server 端

受保護的網路

但可以 ssh 到某一台

remote forwarding

Appication

Server

Appication

Client

ssh

client

tunnel

ssh

server

Local 端

Server 端

ssh -R [remote_port]:[forward_to_host]:[forward_to_port] [ssh_user]@[ssh_host]

remote forwarding

Appication

Server

Appication

Client

ssh

client

tunnel

ssh

server

Local 端

Server 端

私人網路

公開位址

VS Code Remote Develepment

只要可以 ssh 到遠端機器

就可以用遠端機器的資源來開發

(chi 介紹的)

如果我想要用公司的 mac mini 來開發...

就要 ssh 到 公司的 mac mini...

但是公司的 mac mini 沒有直接對外開 ssh 的 port...

VS Code Remote Develepment

mac mini

ssh

server

ssh

client

雲端 server

ssh

server

家裡電腦

ssh

client

remote

forwarding

local

forwarding

參考資料

Barrett, D. J. , & Silverman, R. E. (2001).

SSH, the Secure Shell: The definitive guide. Cambridge, MA: O’Reilly & Associates, Inc.

...

補充一下 ssh 的 MAC

message authentication code

TCP 的特性

已經可以保證資料完整性了?

還需要防止別人更改或亂丟訊息

或是重送攻擊

ssh tunneling

By luyunghsien

ssh tunneling

  • 514