簡而言之,SSH Tunnel的功用就是能做到Port Forwarding。
好...那什麼是Port Forwarding呢?
就是你打東西給A port相當於打給B port,而且A、B port可以在不同的電腦上。
來做個實驗吧!
實驗準備:
1. virtual box 裝了一台 linux,上面裝有openssh-server
2. linux機器的網路設定記得選橋接介面卡
3. 確認能ssh進這台linux
我先讓虛擬機linux跑下面這個簡單的flask server
from flask import Flask
app = Flask(__name__)
@app.route('/')
def welcome():
return "hello"
if __name__ == '__main__':
app.run()
預設應該會是跑在port 5000上 |
接著回到自己的電腦,跑下面這個python script來建立SSH Tunnel
import sshtunnel
server = sshtunnel.SSHTunnelForwarder(
('remote_host', 22),
ssh_username="root",
ssh_password="password",
remote_bind_address=('127.0.0.1', 5000)
)
server.start()
print("port: ", server.local_bind_port)
remote host要輸入的是linux虛擬機器的IP,而remote_bind_address則是127.0.0.1,這是相對於remote host所知的IP。
示意圖,不過我們的web service是在port 5000 圖來源:sshtunnel document |
從console上我們可以看到local端是bind的port,我看到的是port 5421,現在這個port就相當於是我們的虛擬機linux的port 5000。
試著用瀏覽器連到 localhost:54241
看到了hello
成功建立SSH tunnel了!
不過,上面的script缺點有點多,local bind port不能自己決定,應該是有方法可以給定,但有點懶得找,另外要停掉這個python script用ctrl + c不太行,我最後都是開工作管理員來刪。
沒有留言:
張貼留言