一臺處於廣域網中的vps (ubuntu系統),vps安裝ssh,局域網計算機安裝sshhtml
修改vps文件 /etc/ssh/sshd_config
,在第一行添加代碼 GatewayPorts yes
前端
開啓端口,好比開啓6666端口mysql
查看當前端口是否被佔用
lsof -i:6666
若是被佔用的話能夠殺死進程
kill 進程號sql
ssh -fNR 6666:localhost:80 root@vps的ip
輸入vps登錄密碼。完成。shell
如今訪問vps的6666端口,就至關於訪問局域網內計算機的80端口ubuntu
若是局域網計算機掉線,vps會等待必定的時間,若是在這個時間段內局域網計算機能夠上網了,就恢復鏈接;若是超過這個時間段,vps就自動中斷這條服務。具體戳 ssh幾個超時參數安全
ssh 有三個強大的端口轉發命令,分別是本地轉發、遠程轉發、動態轉發。服務器
本地訪問127.0.0.1:port1就是host:port2(用的更多) ssh -CfNg -L port1:127.0.0.1:port2 user@host #本地轉發 訪問host:port2就是訪問127.0.0.1:port1 ssh -CfNg -R port2:127.0.0.1:port1 user@host #遠程轉發 能夠將dmz_host的hostport端口經過remote_ip轉發到本地的port端口 ssh -qTfnN -L port:dmz_host:hostport -l user remote_ip #正向隧道,監聽本地port 能夠將dmz_host的hostport端口轉發到remote_ip的port端口 ssh -qTfnN -R port:dmz_host:hostport -l user remote_ip #反向隧道,用於內網穿透防火牆限制之類 socket代理: ssh -qTfnN -D port remotehost 參數詳解: -q Quiet mode. 安靜模式 -T Disable pseudo-tty allocation. 不佔用 shell 了 -f Requests ssh to go to background just before command execution. 後臺運行,並推薦加上 -n 參數 -N Do not execute a remote command. 不執行遠程命令,端口轉發就用它了 -L port:host:hostport 將本地機(客戶機)的某個端口轉發到遠端指定機器的指定端口. 工做原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了鏈接, 該鏈接就通過安全通道轉發出去, 同時遠程主機和 host 的 hostport 端口創建鏈接. 能夠在配置文件中指定端口的轉發. 只有 root 才能轉發特權端口. IPv6 地址用另外一種格式說明: port/host/hostport -R port:host:hostport 將遠程主機(服務器)的某個端口轉發到本地端指定機器的指定端口. 工做原理是這樣的, 遠程主機上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了鏈接, 該鏈接就通過安全通道轉向出去, 同時本地主機和 host 的 hostport 端口創建鏈接. 能夠在配置文件中指定端口的轉發. 只有用 root 登陸遠程主機才能轉發特權端口. IPv6 地址用另外一種格式說明: port/host/hostport -D port 指定一個本地機器 「動態的’’ 應用程序端口轉發. 工做原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了鏈接, 該鏈接就通過安全通道轉發出去, 根據應用程序的協議能夠判斷出遠程主機將和哪裏鏈接. 目前支持 SOCKS協議, 將充當SOCKS服務器. 只有 root 才能轉發特權端口. 能夠在配置文件中指定動態端口的轉發.
遠程管理服務器上的 mysql,mysql 不能直接 root 遠程登錄。這時候就能夠經過本地轉發,經過 ssh 將服務器的 3306 端口轉發到本地 1234 端口ssh
ssh -CfNg -L 1234:27.0.0.1:3306 root@vps的ip
內網的服務器,外網不能直接訪問,使用遠程轉發,將內網的服務器端口轉發到外網端口。這時候訪問外網的端口,就訪問到了內網的端口。socket
ssh -CfNg -R 81:127.0.0.1:80 root@192.168.153.142
如今在 192.168.153.142 訪問 127.0.0.1:81 就是訪問內網的服務器的 80 端口。
把遠程主機設置成代理,來代理訪問不能訪問的資源。在地機器上分配了一個監聽端口, 一旦這個端口上有了鏈接, 該鏈接就通過 ssh 隧道轉發出去, 根據應用程序的協議能夠判斷出遠程主機將和哪裏鏈接。
ssh -qTfnN -D 1080 root@vps的ip
參考:http://www.zerokeeper.com/experience/network-port-forwarding-and-penetration.html